From 4ed881a80303ac0fd0fec6548339d250306d0585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anian=20B=C3=BChler?= <anian.buehler@reutlingen-university.de> Date: Tue, 5 Oct 2021 16:38:51 +0200 Subject: [PATCH] added icons and added images to buttons --- hs_err_pid25585.log | 0 src/main/java/com/ardublock/Main.java | 2 + .../com/ardublock/ui/OpenblocksFrame.java | 578 +++++++++++++++--- .../ui/listener/ButtonMouseListener.java | 60 ++ .../com/ardublock/block/ardublock.properties | 22 +- .../ardublock/block/ardublock_de.properties | 32 +- .../resources/com/ardublock/block/basic1.png | Bin 0 -> 1655 bytes .../resources/com/ardublock/block/basic2.png | Bin 0 -> 1708 bytes .../resources/com/ardublock/block/basic3.png | Bin 0 -> 1405 bytes .../resources/com/ardublock/block/basic4.png | Bin 0 -> 1738 bytes .../resources/com/ardublock/block/button1.png | Bin 0 -> 206 bytes .../resources/com/ardublock/block/button2.png | Bin 0 -> 206 bytes .../resources/com/ardublock/block/button3.png | Bin 0 -> 205 bytes .../resources/com/ardublock/block/help1.png | Bin 0 -> 947 bytes .../resources/com/ardublock/block/help2.png | Bin 0 -> 953 bytes .../resources/com/ardublock/block/help3.png | Bin 0 -> 836 bytes .../com/ardublock/block/helpSim1.png | Bin 0 -> 947 bytes .../com/ardublock/block/helpSim2.png | Bin 0 -> 953 bytes .../com/ardublock/block/helpSim3.png | Bin 0 -> 836 bytes .../resources/com/ardublock/block/new1.png | Bin 0 -> 1227 bytes .../resources/com/ardublock/block/new2.png | Bin 0 -> 1258 bytes .../resources/com/ardublock/block/new3.png | Bin 0 -> 1067 bytes .../resources/com/ardublock/block/open1.png | Bin 0 -> 824 bytes .../resources/com/ardublock/block/open2.png | Bin 0 -> 827 bytes .../resources/com/ardublock/block/open3.png | Bin 0 -> 704 bytes .../resources/com/ardublock/block/pro1.png | Bin 0 -> 983 bytes .../resources/com/ardublock/block/pro2.png | Bin 0 -> 1019 bytes .../resources/com/ardublock/block/pro3.png | Bin 0 -> 848 bytes .../resources/com/ardublock/block/pro4.png | Bin 0 -> 1029 bytes .../resources/com/ardublock/block/save1.png | Bin 0 -> 844 bytes .../resources/com/ardublock/block/save2.png | Bin 0 -> 839 bytes .../resources/com/ardublock/block/save3.png | Bin 0 -> 711 bytes .../com/ardublock/block/serialMonitor1.png | Bin 0 -> 1434 bytes .../com/ardublock/block/serialMonitor2.png | Bin 0 -> 1418 bytes .../com/ardublock/block/serialMonitor3.png | Bin 0 -> 1199 bytes .../com/ardublock/block/serialPlotter1.png | Bin 0 -> 670 bytes .../com/ardublock/block/serialPlotter2.png | Bin 0 -> 653 bytes .../com/ardublock/block/serialPlotter3.png | Bin 0 -> 588 bytes .../resources/com/ardublock/block/sim1.png | Bin 0 -> 1159 bytes .../resources/com/ardublock/block/sim2.png | Bin 0 -> 1194 bytes .../resources/com/ardublock/block/sim3.png | Bin 0 -> 1001 bytes .../resources/com/ardublock/block/sim4.png | Bin 0 -> 1202 bytes .../resources/com/ardublock/block/upload1.png | Bin 0 -> 1142 bytes .../resources/com/ardublock/block/upload2.png | Bin 0 -> 1176 bytes .../resources/com/ardublock/block/upload3.png | Bin 0 -> 998 bytes .../com/ardublock/block/uploadSim1.png | Bin 0 -> 1255 bytes .../com/ardublock/block/uploadSim2.png | Bin 0 -> 1235 bytes .../com/ardublock/block/uploadSim3.png | Bin 0 -> 1082 bytes 48 files changed, 577 insertions(+), 117 deletions(-) create mode 100644 hs_err_pid25585.log create mode 100644 src/main/java/com/ardublock/ui/listener/ButtonMouseListener.java create mode 100644 src/main/resources/com/ardublock/block/basic1.png create mode 100644 src/main/resources/com/ardublock/block/basic2.png create mode 100644 src/main/resources/com/ardublock/block/basic3.png create mode 100644 src/main/resources/com/ardublock/block/basic4.png create mode 100644 src/main/resources/com/ardublock/block/button1.png create mode 100644 src/main/resources/com/ardublock/block/button2.png create mode 100644 src/main/resources/com/ardublock/block/button3.png create mode 100644 src/main/resources/com/ardublock/block/help1.png create mode 100644 src/main/resources/com/ardublock/block/help2.png create mode 100644 src/main/resources/com/ardublock/block/help3.png create mode 100644 src/main/resources/com/ardublock/block/helpSim1.png create mode 100644 src/main/resources/com/ardublock/block/helpSim2.png create mode 100644 src/main/resources/com/ardublock/block/helpSim3.png create mode 100644 src/main/resources/com/ardublock/block/new1.png create mode 100644 src/main/resources/com/ardublock/block/new2.png create mode 100644 src/main/resources/com/ardublock/block/new3.png create mode 100644 src/main/resources/com/ardublock/block/open1.png create mode 100644 src/main/resources/com/ardublock/block/open2.png create mode 100644 src/main/resources/com/ardublock/block/open3.png create mode 100644 src/main/resources/com/ardublock/block/pro1.png create mode 100644 src/main/resources/com/ardublock/block/pro2.png create mode 100644 src/main/resources/com/ardublock/block/pro3.png create mode 100644 src/main/resources/com/ardublock/block/pro4.png create mode 100644 src/main/resources/com/ardublock/block/save1.png create mode 100644 src/main/resources/com/ardublock/block/save2.png create mode 100644 src/main/resources/com/ardublock/block/save3.png create mode 100644 src/main/resources/com/ardublock/block/serialMonitor1.png create mode 100644 src/main/resources/com/ardublock/block/serialMonitor2.png create mode 100644 src/main/resources/com/ardublock/block/serialMonitor3.png create mode 100644 src/main/resources/com/ardublock/block/serialPlotter1.png create mode 100644 src/main/resources/com/ardublock/block/serialPlotter2.png create mode 100644 src/main/resources/com/ardublock/block/serialPlotter3.png create mode 100644 src/main/resources/com/ardublock/block/sim1.png create mode 100644 src/main/resources/com/ardublock/block/sim2.png create mode 100644 src/main/resources/com/ardublock/block/sim3.png create mode 100644 src/main/resources/com/ardublock/block/sim4.png create mode 100644 src/main/resources/com/ardublock/block/upload1.png create mode 100644 src/main/resources/com/ardublock/block/upload2.png create mode 100644 src/main/resources/com/ardublock/block/upload3.png create mode 100644 src/main/resources/com/ardublock/block/uploadSim1.png create mode 100644 src/main/resources/com/ardublock/block/uploadSim2.png create mode 100644 src/main/resources/com/ardublock/block/uploadSim3.png diff --git a/hs_err_pid25585.log b/hs_err_pid25585.log new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/ardublock/Main.java b/src/main/java/com/ardublock/Main.java index 938b2a2..2e9c717 100644 --- a/src/main/java/com/ardublock/Main.java +++ b/src/main/java/com/ardublock/Main.java @@ -1,9 +1,11 @@ package com.ardublock; +import java.awt.Color; import java.awt.event.WindowEvent; import java.io.IOException; import javax.swing.JFrame; +import javax.swing.UIManager; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; diff --git a/src/main/java/com/ardublock/ui/OpenblocksFrame.java b/src/main/java/com/ardublock/ui/OpenblocksFrame.java index 52d1e40..628afa8 100644 --- a/src/main/java/com/ardublock/ui/OpenblocksFrame.java +++ b/src/main/java/com/ardublock/ui/OpenblocksFrame.java @@ -8,6 +8,7 @@ import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; @@ -21,20 +22,26 @@ import java.util.ResourceBundle; import javax.imageio.ImageIO; import javax.swing.Box; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.ToolTipManager; +import javax.swing.UIManager; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; import com.ardublock.core.Context; import com.ardublock.ui.listener.ArdublockWorkspaceListener; +import com.ardublock.ui.listener.ButtonMouseListener; import com.ardublock.ui.listener.GenerateCodeButtonListener; import com.ardublock.ui.listener.CopyButtonListener; import com.ardublock.ui.listener.NewButtonListener; @@ -56,6 +63,7 @@ import com.ardublock.ui.listener.ZoomOutButtonListener; import edu.mit.blocks.controller.WorkspaceController; import edu.mit.blocks.workspace.Workspace; //import edu.mit.blocks.workspace.ZoomSlider; +import tec.letsgoing.ardublock.simulator.view.GUI; public class OpenblocksFrame extends JFrame @@ -96,6 +104,7 @@ public class OpenblocksFrame extends JFrame public OpenblocksFrame() { + //UIManager.getLookAndFeelDefaults().put("Panel.background", new Color(40, 74, 102)); context = Context.getContext(); this.setTitle(makeFrameTitle()); this.setSize(new Dimension(WINDOW_SIZE_WIDTH, WINDOW_SIZE_HEIGHT)); @@ -111,6 +120,9 @@ public class OpenblocksFrame extends JFrame fileChooser.setFileFilter(ffilter); fileChooser.addChoosableFileFilter(ffilter); + appPrefix = uiMessageBundle.getString("ardublock.ui.appprefix.standard"); + setTitle(makeFrameTitle()); + initOpenBlocks(); } @@ -132,100 +144,258 @@ public class OpenblocksFrame extends JFrame //display ToolTips for 10 seconds ToolTipManager.sharedInstance().setDismissDelay(TOOLTIP_DISMISS_DELAY); - JPanel topPanel = new JPanel(); - topPanel.setLayout(new FlowLayout()); - JButton newButton = new JButton(uiMessageBundle.getString("ardublock.ui.new")); - ActionListener newButtonListener = new NewButtonListener(this); - newButton.addActionListener(newButtonListener); + //NEW + //********** + ImageIcon newButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/new1.png"))); + ImageIcon newButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/new2.png"))); + ImageIcon newButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/new3.png"))); + ButtonMouseListener newButtonMouseListener = new ButtonMouseListener(newButtonIcon, newButtonIconHovered, newButtonIconPressed); + KeyStroke ctrlnKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK); - newButton.registerKeyboardAction(newButtonListener, ctrlnKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + ActionListener newButtonListener = new NewButtonListener(this); + + JButton newButton = new JButton(newButtonIcon); + newButton.addMouseListener(newButtonMouseListener); + newButton.setMargin(new Insets(0, 0, 0, 0)); + newButton.setContentAreaFilled(false); + newButton.setBorderPainted(false); + //JButton newButton = new JButton(uiMessageBundle.getString("ardublock.ui.new")); + newButton.addActionListener(newButtonListener); newButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.new.tooltip")); + //newButton.registerKeyboardAction(newButtonListener, ctrlnKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + + JMenuItem newMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.new")); + newMenuItem.addActionListener(newButtonListener); + newMenuItem.registerKeyboardAction(newButtonListener, ctrlnKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + newMenuItem.setMnemonic(KeyEvent.VK_N); + newMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.new.tooltip")); + + + + //SAVE + //********** + ImageIcon saveButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/save1.png"))); + ImageIcon saveButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/save2.png"))); + ImageIcon saveButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/save3.png"))); + ButtonMouseListener saveButtonMouseListener = new ButtonMouseListener(saveButtonIcon, saveButtonIconHovered, saveButtonIconPressed); - JButton saveButton = new JButton(uiMessageBundle.getString("ardublock.ui.save")); + KeyStroke ctrlsKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK); ActionListener saveButtonListener = new SaveButtonListener(this); + + JButton saveButton = new JButton(saveButtonIcon); + saveButton.addMouseListener(saveButtonMouseListener); + saveButton.setMargin(new Insets(0, 0, 0, 0)); + saveButton.setContentAreaFilled(false); + saveButton.setBorderPainted(false); + //JButton saveButton = new JButton(uiMessageBundle.getString("ardublock.ui.save")); saveButton.addActionListener(saveButtonListener); - KeyStroke ctrlsKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK); - saveButton.registerKeyboardAction(saveButtonListener, ctrlsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + //saveButton.registerKeyboardAction(saveButtonListener, ctrlsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); saveButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.save.tooltip")); - JButton saveAsButton = new JButton(uiMessageBundle.getString("ardublock.ui.saveAs")); - ActionListener saveAsButtonListener = new SaveAsButtonListener(this); - saveAsButton.addActionListener(saveAsButtonListener); + JMenuItem saveMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.save")); + saveMenuItem.addActionListener(saveButtonListener); + saveMenuItem.setMnemonic(KeyEvent.VK_S); + saveMenuItem.registerKeyboardAction(newButtonListener, ctrlsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + saveMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.save.tooltip")); + + + //SAVE AS + //********** KeyStroke ctrlshiftsKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); - saveAsButton.registerKeyboardAction(saveAsButtonListener, ctrlshiftsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); - saveAsButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveAs.tooltip")); + ActionListener saveAsButtonListener = new SaveAsButtonListener(this); - JButton openButton = new JButton(uiMessageBundle.getString("ardublock.ui.load")); + //JButton saveAsButton = new JButton(uiMessageBundle.getString("ardublock.ui.saveAs")); + //saveAsButton.addActionListener(saveAsButtonListener); + //saveAsButton.registerKeyboardAction(saveAsButtonListener, ctrlshiftsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + //saveAsButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveAs.tooltip")); + + JMenuItem saveAsMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.saveAs")); + saveAsMenuItem.addActionListener(saveAsButtonListener); + saveAsMenuItem.registerKeyboardAction(saveAsButtonListener, ctrlshiftsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + saveAsMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveAs.tooltip")); + + + //OPEN + //********* + ImageIcon openButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/open1.png"))); + ImageIcon openButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/open2.png"))); + ImageIcon openButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/open3.png"))); + ButtonMouseListener openButtonMouseListener = new ButtonMouseListener(openButtonIcon, openButtonIconHovered, openButtonIconPressed); + + KeyStroke ctrloKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK); ActionListener openButtonListener = new OpenButtonListener(this); + + JButton openButton = new JButton(openButtonIcon); + openButton.addMouseListener(openButtonMouseListener); + openButton.setMargin(new Insets(0, 0, 0, 0)); + openButton.setContentAreaFilled(false); + openButton.setBorderPainted(false); + //JButton openButton = new JButton(uiMessageBundle.getString("ardublock.ui.load")); openButton.addActionListener(openButtonListener); - KeyStroke ctrloKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK); - openButton.registerKeyboardAction(openButtonListener, ctrloKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + //openButton.registerKeyboardAction(openButtonListener, ctrloKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); openButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.load.tooltip")); - JButton generateButton = new JButton(uiMessageBundle.getString("ardublock.ui.upload")); + JMenuItem openMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.load")); + openMenuItem.addActionListener(openButtonListener); + openMenuItem.setMnemonic(KeyEvent.VK_O); + openMenuItem.registerKeyboardAction(openButtonListener, ctrloKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + openMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.load.tooltip")); + + + //GENERATE + //********** + ImageIcon generateButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/upload1.png"))); + ImageIcon generateButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/upload2.png"))); + ImageIcon generateButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/upload3.png"))); + ButtonMouseListener generateButtonMouseListener = new ButtonMouseListener(generateButtonIcon, generateButtonIconHovered, generateButtonIconPressed); + + KeyStroke ctrluKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.CTRL_MASK); ActionListener generateButtonListener = new GenerateCodeButtonListener(this, this, context); + + JButton generateButton = new JButton(generateButtonIcon); + generateButton.addMouseListener(generateButtonMouseListener); + generateButton.setMargin(new Insets(0, 0, 0, 0)); + generateButton.setContentAreaFilled(false); + generateButton.setBorderPainted(false); + //JButton generateButton = new JButton(uiMessageBundle.getString("ardublock.ui.upload")); generateButton.addActionListener(generateButtonListener); - KeyStroke ctrluKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.CTRL_MASK); - generateButton.registerKeyboardAction(generateButtonListener, ctrluKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + //generateButton.registerKeyboardAction(generateButtonListener, ctrluKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); generateButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.upload.tooltip")); - //added for simulator integration - JButton simulateButton = new JButton(uiMessageBundle.getString("ardublock.ui.simulation")); + JMenuItem generateMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.upload")); + generateMenuItem.addActionListener(generateButtonListener); + generateMenuItem.setMnemonic(KeyEvent.VK_U); + generateMenuItem.registerKeyboardAction(generateButtonListener, ctrluKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + generateMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.upload.tooltip")); + + //Simulate + //********** + ImageIcon simulateButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/uploadSim1.png"))); + ImageIcon simulateButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/uploadSim2.png"))); + ImageIcon simulateButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/uploadSim3.png"))); + ButtonMouseListener simulateButtonMouseListener = new ButtonMouseListener(simulateButtonIcon, simulateButtonIconHovered, simulateButtonIconPressed); + ActionListener simulateButtonListener = new SimulateCodeButtonListener(this, this, context); + + JButton simulateButton = new JButton(simulateButtonIcon); + simulateButton.addMouseListener(simulateButtonMouseListener); + simulateButton.setMargin(new Insets(0, 0, 0, 0)); + simulateButton.setContentAreaFilled(false); + simulateButton.setBorderPainted(false); + //JButton simulateButton = new JButton(uiMessageBundle.getString("ardublock.ui.simulation")); simulateButton.addActionListener(simulateButtonListener); simulateButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.simulation.tooltip")); simulateButton.setVisible(false); //hide on startUp - JButton simulatorHelpButton = new JButton(uiMessageBundle.getString("ardublock.ui.simulatorHelp")); + JMenuItem simulateMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.simulation")); + simulateMenuItem.addActionListener(simulateButtonListener); + simulateMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.simulation.tooltip")); + simulateMenuItem.setVisible(false); //hide on startUp + + //SIMULATOR HELP + //************** + ImageIcon simulatorHelpButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/helpSim1.png"))); + ImageIcon simulatorHelpButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/helpSim2.png"))); + ImageIcon simulatorHelpButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/helpSim3.png"))); + ButtonMouseListener simulatorHelpButtonMouseListener = new ButtonMouseListener(simulatorHelpButtonIcon, simulatorHelpButtonIconHovered, simulatorHelpButtonIconPressed); + ActionListener simulatorHelpButtonListener = new SimulatorHelpButtonListener(this); + + JButton simulatorHelpButton = new JButton(simulatorHelpButtonIcon); + simulatorHelpButton.addMouseListener(simulatorHelpButtonMouseListener); + simulatorHelpButton.setMargin(new Insets(0, 0, 0, 0)); + simulatorHelpButton.setContentAreaFilled(false); + simulatorHelpButton.setBorderPainted(false); + //JButton simulatorHelpButton = new JButton(uiMessageBundle.getString("ardublock.ui.simulatorHelp")); simulatorHelpButton.addActionListener(simulatorHelpButtonListener); simulatorHelpButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.simulatorHelp.tooltip")); simulatorHelpButton.setVisible(false); //hide on startUp - JButton serialMonitorButton = new JButton(uiMessageBundle.getString("ardublock.ui.serialMonitor")); + JMenuItem simulatorHelpMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.simulatorHelp")); + simulatorHelpMenuItem.addActionListener(simulatorHelpButtonListener); + simulatorHelpMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.simulatorHelp.tooltip")); + simulatorHelpMenuItem.setVisible(false); //hide on startUp + + + //SERIAL MONITOR + //************** + ImageIcon serialMonitorButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/serialMonitor1.png"))); + ImageIcon serialMonitorButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/serialMonitor2.png"))); + ImageIcon serialMonitorButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/serialMonitor3.png"))); + ButtonMouseListener serialMonitorButtonMouseListener = new ButtonMouseListener(serialMonitorButtonIcon, serialMonitorButtonIconHovered, serialMonitorButtonIconPressed); + + KeyStroke ctrlmKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); ActionListener serialButtonListener = new ActionListener () { public void actionPerformed(ActionEvent e) { context.getEditor().handleSerial(); } }; + + JButton serialMonitorButton = new JButton(serialMonitorButtonIcon); + serialMonitorButton.addMouseListener(serialMonitorButtonMouseListener); + serialMonitorButton.setMargin(new Insets(0, 0, 0, 0)); + serialMonitorButton.setContentAreaFilled(false); + serialMonitorButton.setBorderPainted(false); + //JButton serialMonitorButton = new JButton(uiMessageBundle.getString("ardublock.ui.serialMonitor")); serialMonitorButton.addActionListener(serialButtonListener); - KeyStroke ctrlmKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); - serialMonitorButton.registerKeyboardAction(serialButtonListener, ctrlmKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + //serialMonitorButton.registerKeyboardAction(serialButtonListener, ctrlmKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); serialMonitorButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.serialMonitor.tooltip")); - JButton serialPlotterButton = new JButton(uiMessageBundle.getString("ardublock.ui.serialPlotter")); + JMenuItem serialMonitorMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.serialMonitor")); + serialMonitorMenuItem.addActionListener(serialButtonListener); + serialMonitorMenuItem.registerKeyboardAction(serialButtonListener, ctrlmKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + serialMonitorMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.serialMonitor.tooltip")); + + + //SERIAL PLOTTER + //************** + ImageIcon serialPlotterButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/serialPlotter1.png"))); + ImageIcon serialPlotterButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/serialPlotter2.png"))); + ImageIcon serialPlotterButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/serialPlotter3.png"))); + ButtonMouseListener serialPlotterButtonMouseListener = new ButtonMouseListener(serialPlotterButtonIcon, serialPlotterButtonIconHovered, serialPlotterButtonIconPressed); + + KeyStroke ctrlLKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); ActionListener serialPlotterButtonListener = new ActionListener () { public void actionPerformed(ActionEvent e) { context.getEditor().handlePlotter(); } }; + + JButton serialPlotterButton = new JButton(serialPlotterButtonIcon); + serialPlotterButton.addMouseListener(serialPlotterButtonMouseListener); + serialPlotterButton.setMargin(new Insets(0, 0, 0, 0)); + serialPlotterButton.setContentAreaFilled(false); + serialPlotterButton.setBorderPainted(false); + //JButton serialPlotterButton = new JButton(uiMessageBundle.getString("ardublock.ui.serialPlotter")); serialPlotterButton.addActionListener(serialPlotterButtonListener); - KeyStroke ctrlLKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); - serialPlotterButton.registerKeyboardAction(serialPlotterButtonListener, ctrlLKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + //serialPlotterButton.registerKeyboardAction(serialPlotterButtonListener, ctrlLKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); serialPlotterButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.serialPlotter.tooltip")); - topPanel.add(newButton); - topPanel.add(saveButton); - topPanel.add(saveAsButton); - topPanel.add(openButton); - topPanel.add(Box.createRigidArea(new Dimension(15, 0))); //std value 30,0 - topPanel.add(generateButton); - topPanel.add(simulateButton); - topPanel.add(Box.createRigidArea(new Dimension(15, 0))); //std value 30,0 - topPanel.add(simulatorHelpButton); - topPanel.add(serialMonitorButton); - topPanel.add(serialPlotterButton); - - //SAVE IMAGE BUTTON + JMenuItem serialPlotterMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.serialPlotter")); + serialPlotterMenuItem.addActionListener(serialPlotterButtonListener); + serialPlotterMenuItem.registerKeyboardAction(serialPlotterButtonListener, ctrlLKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + serialPlotterMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.serialPlotter.tooltip")); + + + //**************************** + //BOTTOM + //****************************** + + //SAVE IMAGE //***************************************** - JPanel bottomPanel = new JPanel(); - JButton saveImageButton = new JButton(uiMessageBundle.getString("ardublock.ui.saveImage")); ActionListener saveImageButtonListener = new SaveImageButtonListener(this); - saveImageButton.addActionListener(saveImageButtonListener); KeyStroke ctrlpKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK); - saveImageButton.registerKeyboardAction(saveImageButtonListener, ctrlpKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + + JButton saveImageButton = new JButton(uiMessageBundle.getString("ardublock.ui.saveImage")); + saveImageButton.addActionListener(saveImageButtonListener); + //saveImageButton.registerKeyboardAction(saveImageButtonListener, ctrlpKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); saveImageButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveImage.tooltip")); + + JMenuItem saveImageMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.saveImage")); + saveImageMenuItem.addActionListener(saveImageButtonListener); + saveImageMenuItem.registerKeyboardAction(saveImageButtonListener, ctrlpKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + saveImageMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveImage.tooltip")); //***************************************** //LMS SITE BUTTON @@ -250,14 +420,13 @@ public class OpenblocksFrame extends JFrame //BLOCK REFERENCE BUTTON //***************************************** - JButton blockreferenceButton = new JButton(uiMessageBundle.getString("ardublock.ui.blockReference")); ActionListener blockreferenceButtonListener = new ActionListener () { public void actionPerformed(ActionEvent e) { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; URL url; if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { try { - url = new URL(uiMessageBundle.getString("ardublock.ui.blockReference.domain")); + url = new URL(uiMessageBundle.getString("ardublock.ui.blockreference.domain")); desktop.browse(url.toURI()); } catch (Exception e1) { //e1.printStackTrace(); @@ -265,13 +434,19 @@ public class OpenblocksFrame extends JFrame } } }; + + JButton blockreferenceButton = new JButton(uiMessageBundle.getString("ardublock.ui.blockreference")); blockreferenceButton.addActionListener(blockreferenceButtonListener); - blockreferenceButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.blockReference.tooltip")); + blockreferenceButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.blockreference.tooltip")); + + JMenuItem blockreferenceMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.blockreference")); + blockreferenceMenuItem.addActionListener(blockreferenceButtonListener); + blockreferenceMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.blockreference.tooltip")); //***************************************** // VERSION LABEL //***************************************** - JLabel versionLabel = new JLabel(uiMessageBundle.getString("ardublock.ui.version")); + //JLabel versionLabel = new JLabel(uiMessageBundle.getString("ardublock.ui.version")); //***************************************** //ADD ZOOM (currently only by CTRL +/- or mouse wheel @@ -283,20 +458,43 @@ public class OpenblocksFrame extends JFrame //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 ctrlaltsKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK | ActionEvent.ALT_MASK); - saveDefaultButton.registerKeyboardAction(saveDefaultButtonListener, ctrlaltsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); - saveDefaultButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram.tooltip")); + + /*JButton saveDefaultButton = new JButton(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram")); + saveDefaultButton.addActionListener(saveDefaultButtonListener); + //saveDefaultButton.registerKeyboardAction(saveDefaultButtonListener, ctrlaltsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + saveDefaultButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram.tooltip"));*/ + + JMenuItem saveDefaultMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram")); + saveDefaultMenuItem.addActionListener(saveDefaultButtonListener); + saveDefaultMenuItem.registerKeyboardAction(saveDefaultButtonListener, ctrlaltsKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + saveDefaultMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram.tooltip")); //SWITCH BLOCK MENU BASIC/PRO/SIM - //***************************************** + //***************************************** + ImageIcon modeBasicButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/basic1.png"))); + ImageIcon modeBasicButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/basic2.png"))); + ImageIcon modeBasicButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/basic3.png"))); + ImageIcon modeBasicButtonIconSelected = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/basic4.png"))); + + ImageIcon modeProButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/pro1.png"))); + ImageIcon modeProButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/pro2.png"))); + ImageIcon modeProButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/pro3.png"))); + ImageIcon modeProButtonIconSelected = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/pro4.png"))); + + ImageIcon modeSimButtonIcon = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/sim1.png"))); + ImageIcon modeSimButtonIconHovered = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/sim2.png"))); + ImageIcon modeSimButtonIconPressed = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/sim3.png"))); + ImageIcon modeSimButtonIconSelected = new ImageIcon(getToolkit().getImage(GUI.class.getResource("/com/ardublock/block/sim4.png"))); + + ButtonMouseListener modeBasicButtonMouseListener = new ButtonMouseListener(modeBasicButtonIcon, modeBasicButtonIconHovered, modeBasicButtonIconPressed,modeBasicButtonIconSelected); + ButtonMouseListener modeProButtonMouseListener = new ButtonMouseListener(modeProButtonIcon, modeProButtonIconHovered, modeProButtonIconPressed, modeProButtonIconSelected); + ButtonMouseListener modeSimButtonMouseListener = new ButtonMouseListener(modeSimButtonIcon, modeSimButtonIconHovered, modeSimButtonIconPressed, modeSimButtonIconSelected); + //Workspace: BASIC //***************** - modeBasicButton = new JButton(uiMessageBundle.getString("ardublock.ui.mode.standard")); - modeBasicButton.setFont(new Font("Sans", Font.BOLD, 12)); ActionListener modeBasicButtonListener = new ActionListener () { public void actionPerformed(ActionEvent e) { //get current zoomLevel @@ -313,15 +511,26 @@ public class OpenblocksFrame extends JFrame WorkspaceController workspaceController = context.getWorkspaceController(); workspaceController.loadProject(getArduBlockString(), null , "default"); generateButton.setVisible(true); + generateMenuItem.setVisible(true); + generateMenuItem.registerKeyboardAction(generateButtonListener, ctrluKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); simulateButton.setVisible(false); + simulateMenuItem.setVisible(false); + simulateMenuItem.unregisterKeyboardAction(ctrluKeyStroke); simulatorHelpButton.setVisible(false); serialMonitorButton.setVisible(true); serialPlotterButton.setVisible(true); + modeBasicButtonMouseListener.setSelected(true); + modeProButtonMouseListener.setSelected(false); + modeSimButtonMouseListener.setSelected(false); + modeBasicButton.setIcon(modeBasicButtonIconSelected); + modeProButton.setIcon(modeProButtonIcon); + modeSimButton.setIcon(modeSimButtonIcon); + //modeBasicButton.setFont(new Font("Sans", Font.BOLD, 12)); + //modeProButton.setFont(new Font("Sans", Font.PLAIN, 12)); + //modeSimButton.setFont(new Font("Sans", Font.PLAIN, 12)); + appPrefix = uiMessageBundle.getString("ardublock.ui.appprefix.standard"); setTitle(makeFrameTitle()); - modeBasicButton.setFont(new Font("Sans", Font.BOLD, 12)); - modeProButton.setFont(new Font("Sans", Font.PLAIN, 12)); - modeSimButton.setFont(new Font("Sans", Font.PLAIN, 12)); //zoomSlider.reset(); //zoomSlider.setValue(currentWorkspaceZoom); workspace.setWorkspaceZoom(currentWorkspaceZoom); @@ -331,13 +540,27 @@ public class OpenblocksFrame extends JFrame } } }; + + modeBasicButton = new JButton(modeBasicButtonIconSelected); + modeBasicButton.setMargin(new Insets(0, 0, 0, 0)); + modeBasicButton.setContentAreaFilled(false); + modeBasicButton.setBorderPainted(false); + modeBasicButton.addMouseListener(modeBasicButtonMouseListener); + modeBasicButtonMouseListener.setSelected(true); + //modeBasicButton = new JButton(uiMessageBundle.getString("ardublock.ui.mode.standard")); + //modeBasicButton.setFont(new Font("Sans", Font.BOLD, 12)); + //modeBasicButton.setForeground(Color.RED); modeBasicButton.addActionListener(modeBasicButtonListener); modeBasicButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.standard.tooltip")); + + JMenuItem modeBasicMenuItem = new JMenuItem("Blockset "+uiMessageBundle.getString("ardublock.ui.mode.standard")); + modeBasicMenuItem.addActionListener(modeBasicButtonListener); + modeBasicMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.standard.tooltip")); + //Workspace: PRO //***************** - modeProButton = new JButton(uiMessageBundle.getString("ardublock.ui.mode.expert")); - modeProButton.setFont(new Font("Sans", Font.PLAIN, 12)); + //***************** ActionListener modeProButtonListener = new ActionListener () { public void actionPerformed(ActionEvent e) { @@ -353,13 +576,23 @@ public class OpenblocksFrame extends JFrame WorkspaceController workspaceController = context.getWorkspaceController(); workspaceController.loadProject(getArduBlockString(), null , "custom"); generateButton.setVisible(true); + generateMenuItem.setVisible(true); + generateMenuItem.registerKeyboardAction(generateButtonListener, ctrluKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); simulateButton.setVisible(false); + simulateMenuItem.setVisible(false); + simulateMenuItem.unregisterKeyboardAction(ctrluKeyStroke); simulatorHelpButton.setVisible(false); serialMonitorButton.setVisible(true); serialPlotterButton.setVisible(true); - modeBasicButton.setFont(new Font("Sans", Font.PLAIN, 12)); - modeProButton.setFont(new Font("Sans", Font.BOLD, 12)); - modeSimButton.setFont(new Font("Sans", Font.PLAIN, 12)); + modeBasicButtonMouseListener.setSelected(false); + modeProButtonMouseListener.setSelected(true); + modeSimButtonMouseListener.setSelected(false); + modeBasicButton.setIcon(modeBasicButtonIcon); + modeProButton.setIcon(modeProButtonIconSelected); + modeSimButton.setIcon(modeSimButtonIcon); + //modeBasicButton.setFont(new Font("Sans", Font.PLAIN, 12)); + //modeProButton.setFont(new Font("Sans", Font.BOLD, 12)); + //modeSimButton.setFont(new Font("Sans", Font.PLAIN, 12)); appPrefix = uiMessageBundle.getString("ardublock.ui.appprefix.pro"); setTitle(makeFrameTitle()); @@ -373,13 +606,23 @@ public class OpenblocksFrame extends JFrame } } }; + + modeProButton = new JButton(modeProButtonIcon); + modeProButton.setMargin(new Insets(0, 0, 0, 0)); + modeProButton.setContentAreaFilled(false); + modeProButton.setBorderPainted(false); + modeProButton.addMouseListener(modeProButtonMouseListener); + //modeProButton = new JButton(uiMessageBundle.getString("ardublock.ui.mode.expert")); + //modeProButton.setFont(new Font("Sans", Font.PLAIN, 12)); modeProButton.addActionListener(modeProButtonListener); modeProButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.expert.tooltip")); + JMenuItem modeProMenuItem = new JMenuItem("Blockset "+uiMessageBundle.getString("ardublock.ui.mode.expert")); + modeProMenuItem.addActionListener(modeProButtonListener); + modeProMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.expert.tooltip")); + //Workspace: SIM //***************** - modeSimButton = new JButton(uiMessageBundle.getString("ardublock.ui.mode.sim")); - modeSimButton.setFont(new Font("Sans", Font.PLAIN, 12)); ActionListener modeSimButtonListener = new ActionListener () { public void actionPerformed(ActionEvent e) { @@ -397,13 +640,23 @@ public class OpenblocksFrame extends JFrame //TODO check if reduced sim-blockset is necessary workspaceController.loadProject(getArduBlockString(), null , "page"); generateButton.setVisible(false); + generateMenuItem.setVisible(false); + generateMenuItem.unregisterKeyboardAction(ctrluKeyStroke); simulateButton.setVisible(true); + simulateMenuItem.setVisible(true); + simulateMenuItem.registerKeyboardAction(simulateButtonListener, ctrluKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); simulatorHelpButton.setVisible(true); serialMonitorButton.setVisible(false); serialPlotterButton.setVisible(false); - modeBasicButton.setFont(new Font("Sans", Font.PLAIN, 12)); - modeProButton.setFont(new Font("Sans", Font.PLAIN, 12)); - modeSimButton.setFont(new Font("Sans", Font.BOLD, 12)); + modeBasicButtonMouseListener.setSelected(false); + modeProButtonMouseListener.setSelected(false); + modeSimButtonMouseListener.setSelected(true); + modeBasicButton.setIcon(modeBasicButtonIcon); + modeProButton.setIcon(modeProButtonIcon); + modeSimButton.setIcon(modeSimButtonIconSelected); + //modeBasicButton.setFont(new Font("Sans", Font.PLAIN, 12)); + //modeProButton.setFont(new Font("Sans", Font.PLAIN, 12)); + //modeSimButton.setFont(new Font("Sans", Font.BOLD, 12)); appPrefix = uiMessageBundle.getString("ardublock.ui.appprefix.sim"); setTitle(makeFrameTitle()); @@ -417,32 +670,59 @@ public class OpenblocksFrame extends JFrame } } }; + + modeSimButton = new JButton(modeSimButtonIcon); + modeSimButton.setMargin(new Insets(0, 0, 0, 0)); + modeSimButton.setContentAreaFilled(false); + modeSimButton.setBorderPainted(false); + modeSimButton.addMouseListener(modeSimButtonMouseListener); + //modeSimButton = new JButton(uiMessageBundle.getString("ardublock.ui.mode.sim")); + //modeSimButton.setFont(new Font("Sans", Font.PLAIN, 12)); modeSimButton.addActionListener(modeSimButtonListener); modeSimButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.sim.tooltip")); + + JMenuItem modeSimMenuItem = new JMenuItem("Blockset "+uiMessageBundle.getString("ardublock.ui.mode.sim")); + modeSimMenuItem.addActionListener(modeSimButtonListener); + modeSimMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.sim.tooltip")); //***************************************** - //COPY/PASTE BUTTONS + + //COPY PROGRAM //***************************************** - JButton copyButton = new JButton(uiMessageBundle.getString("ardublock.ui.copy")); + KeyStroke ctrlcKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); ActionListener copyButtonListener = new CopyButtonListener(context); + + /*JButton copyButton = new JButton(uiMessageBundle.getString("ardublock.ui.copy")); copyButton.addActionListener(copyButtonListener); - KeyStroke ctrlcKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); - copyButton.registerKeyboardAction(copyButtonListener, ctrlcKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + //copyButton.registerKeyboardAction(copyButtonListener, ctrlcKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); copyButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.copy.tooltip")); + */ + JMenuItem copyButtonMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.copy")); + copyButtonMenuItem.registerKeyboardAction(serialButtonListener, ctrlcKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + copyButtonMenuItem.addActionListener(copyButtonListener); + copyButtonMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.copy.tooltip")); - JButton pasteButton = new JButton(uiMessageBundle.getString("ardublock.ui.paste")); + + //PASTE PROGRAM + //***************************************** + KeyStroke ctrlvKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); ActionListener pasteButtonListener = new PasteButtonListener(this, context, uiMessageBundle, workspaceModeState); + + /*JButton pasteButton = new JButton(uiMessageBundle.getString("ardublock.ui.paste")); pasteButton.addActionListener(pasteButtonListener); - KeyStroke ctrlvKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK); - pasteButton.registerKeyboardAction(pasteButtonListener, ctrlvKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); - pasteButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.paste.tooltip")); - //***************************************** + //pasteButton.registerKeyboardAction(pasteButtonListener, ctrlvKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + pasteButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.paste.tooltip"));*/ - //WEBSITE BUTTON - //***************************************** - JButton websiteButton = new JButton(uiMessageBundle.getString("ardublock.ui.website")); - websiteButton.addActionListener(new ActionListener () { + JMenuItem pasteButtonMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.paste")); + pasteButtonMenuItem.registerKeyboardAction(pasteButtonListener, ctrlvKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + pasteButtonMenuItem.addActionListener(pasteButtonListener); + pasteButtonMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.paste.tooltip")); + + + //WEBSITE + //***************************************** + ActionListener websiteButtonListener = new ActionListener () { public void actionPerformed(ActionEvent e) { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; URL url; @@ -455,33 +735,131 @@ public class OpenblocksFrame extends JFrame } } } - }); - websiteButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.website.tooltip")); + }; + + //JButton websiteButton = new JButton(uiMessageBundle.getString("ardublock.ui.website")); + //websiteButton.addActionListener(websiteButtonListener); + //websiteButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.website.tooltip")); + + JMenuItem websiteButtonMenuItem = new JMenuItem(uiMessageBundle.getString("ardublock.ui.website")); + websiteButtonMenuItem.addActionListener(websiteButtonListener); + websiteButtonMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.website.tooltip")); //***************************************** - //bottomPanel.add(blockreferenceButton); + //VERSION + //********* + ActionListener repositoryButtonListener = new ActionListener () { + public void actionPerformed(ActionEvent e) { + Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; + URL url; + if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { + try { + url = new URL(uiMessageBundle.getString("ardublock.ui.website.repository")); + desktop.browse(url.toURI()); + } catch (Exception e1) { + //e1.printStackTrace(); + } + } + } + }; + + + + JMenuItem versionMenuItem = new JMenuItem("ArduBlock " + uiMessageBundle.getString("ardublock.ui.version")); + versionMenuItem.addActionListener(repositoryButtonListener); + versionMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.repository.tooltip")); + //************************************ + //PANELS + //************************************* + //PANELS + JPanel topPanel = new JPanel(new BorderLayout()); //topPanel.setLayout(new FlowLayout()); + JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JPanel menuePanel = new JPanel(new BorderLayout());//new FlowLayout(FlowLayout.LEFT)); + JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + + bottomPanel.setBackground(new Color(40, 76, 102)); + buttonPanel.setBackground(new Color(40, 76, 102)); + + //MENUS + JMenuBar menuBar = new JMenuBar(); + JMenu fileMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.file")); + JMenu programMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.program")); + JMenu toolsMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.tools")); + JMenu blocksMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.blocks")); + JMenu aboutMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.about")); + + menuBar.add(fileMenu); + menuBar.add(programMenu); + menuBar.add(toolsMenu); + menuBar.add(blocksMenu); + menuBar.add(aboutMenu); + + fileMenu.add(newMenuItem); + fileMenu.add(openMenuItem); + fileMenu.addSeparator(); + fileMenu.add(saveMenuItem); + fileMenu.add(saveAsMenuItem); + + programMenu.add(generateMenuItem); + programMenu.add(simulateMenuItem); + programMenu.addSeparator(); + programMenu.add(copyButtonMenuItem); + programMenu.add(pasteButtonMenuItem); + programMenu.addSeparator(); + programMenu.add(saveImageMenuItem); + programMenu.add(saveDefaultMenuItem); + + toolsMenu.add(serialMonitorMenuItem); + toolsMenu.add(serialPlotterMenuItem); + + blocksMenu.add(modeBasicMenuItem); + blocksMenu.add(modeProMenuItem); + blocksMenu.add(modeSimMenuItem); + blocksMenu.addSeparator(); + blocksMenu.add(blockreferenceMenuItem); + + aboutMenu.add(websiteButtonMenuItem); + aboutMenu.add(simulatorHelpMenuItem); + aboutMenu.add(versionMenuItem); + + menuePanel.add(menuBar, BorderLayout.CENTER ); + topPanel.add(menuePanel, BorderLayout.NORTH); //TEST + topPanel.add(buttonPanel, BorderLayout.CENTER); //TEST + + buttonPanel.add(generateButton); + buttonPanel.add(simulateButton); + buttonPanel.add(Box.createRigidArea(new Dimension(30, 0))); //std value 30,0 + buttonPanel.add(newButton); + buttonPanel.add(openButton); + buttonPanel.add(saveButton); + //topPanel.add(saveAsButton); + buttonPanel.add(Box.createRigidArea(new Dimension(15, 0))); //std value 30,0 + buttonPanel.add(simulatorHelpButton); + buttonPanel.add(serialMonitorButton); + buttonPanel.add(serialPlotterButton); + bottomPanel.add(modeBasicButton); bottomPanel.add(modeProButton); bottomPanel.add(modeSimButton); + bottomPanel.add(Box.createRigidArea(new Dimension(30, 0))); //std value 30,0 + bottomPanel.add(context.getWorkspaceController().getSearchBar(uiMessageBundle.getString("ardublock.ui.search"), uiMessageBundle.getString("ardublock.ui.search.tooltip"))); - bottomPanel.add(Box.createRigidArea(new Dimension(5, 0))); //std value 30,0 - bottomPanel.add(context.getWorkspaceController().getSearchBar()); - - bottomPanel.add(Box.createRigidArea(new Dimension(5, 0))); //std value 30,0 + //bottomPanel.add(blockreferenceButton); + //bottomPanel.add(Box.createRigidArea(new Dimension(5, 0))); //std value 30,0 //bottomPanel.add(zoomSlider); //bottomPanel.add(zoomInButton); //bottomPanel.add(zoomResetButton); //bottomPanel.add(zoomOutButton); - bottomPanel.add(Box.createRigidArea(new Dimension(5, 0)));//std value 30,0 - bottomPanel.add(copyButton); - bottomPanel.add(pasteButton); - bottomPanel.add(Box.createRigidArea(new Dimension(5, 0))); //std value 30,0 - bottomPanel.add(saveImageButton); - bottomPanel.add(saveDefaultButton); - bottomPanel.add(Box.createRigidArea(new Dimension(5, 0))); //std value 30,0 - bottomPanel.add(versionLabel); - bottomPanel.add(Box.createRigidArea(new Dimension(5, 0))); //std value 30,0 - bottomPanel.add(websiteButton); + //bottomPanel.add(Box.createRigidArea(new Dimension(5, 0)));//std value 30,0 + //bottomPanel.add(copyButton); + //bottomPanel.add(pasteButton); + //bottomPanel.add(Box.createRigidArea(new Dimension(30, 0))); //std value 30,0 + //bottomPanel.add(saveImageButton); + //bottomPanel.add(saveDefaultButton); + //bottomPanel.add(Box.createRigidArea(new Dimension(5, 0))); //std value 30,0 + //bottomPanel.add(versionLabel); + //bottomPanel.add(Box.createRigidArea(new Dimension(5, 0))); //std value 30,0 + //bottomPanel.add(websiteButton); //bottomPanel.add(lmssiteButton); diff --git a/src/main/java/com/ardublock/ui/listener/ButtonMouseListener.java b/src/main/java/com/ardublock/ui/listener/ButtonMouseListener.java new file mode 100644 index 0000000..313ac1f --- /dev/null +++ b/src/main/java/com/ardublock/ui/listener/ButtonMouseListener.java @@ -0,0 +1,60 @@ +package com.ardublock.ui.listener; + +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +import javax.swing.ImageIcon; +import javax.swing.JButton; + + +public class ButtonMouseListener extends MouseAdapter { + + ImageIcon iconPressed; + ImageIcon iconHover; + ImageIcon iconButton; + ImageIcon iconSelected; + + boolean selected = false; + + public ButtonMouseListener(ImageIcon iconButton, ImageIcon iconHover, ImageIcon iconPressed, ImageIcon iconSelected) { + this.iconButton = iconButton; + this.iconHover = iconHover; + this.iconPressed = iconPressed; + this.iconSelected = iconSelected; + } + + public ButtonMouseListener(ImageIcon iconButton, ImageIcon iconHover, ImageIcon iconPressed) { + this(iconButton, iconHover, iconPressed, iconButton); + } + + @Override + public void mouseEntered(MouseEvent e) { + JButton button = (JButton)e.getSource(); + button.setIcon(iconHover); + } + + @Override + public void mouseExited(MouseEvent e) { + JButton button = (JButton)e.getSource(); + if(selected) { + button.setIcon(iconSelected); + }else { + button.setIcon(iconButton); + } + } + + @Override + public void mousePressed(MouseEvent e) { + JButton button = (JButton)e.getSource(); + button.setIcon(iconPressed); + super.mousePressed(e); + } + + public void setSelected(boolean selected) { + this.selected = selected; + } + +} + + + diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties index 212bcea..c304c6b 100644 --- a/src/main/resources/com/ardublock/block/ardublock.properties +++ b/src/main/resources/com/ardublock/block/ardublock.properties @@ -9,6 +9,12 @@ ardublock.file.suffix=Ardublock Program File(*.abp) #UI #**************************** +ardublock.ui.menu.file=File +ardublock.ui.menu.program=Program +ardublock.ui.menu.tools=Tools +ardublock.ui.menu.blocks=Blocks +ardublock.ui.menu.about=About + ardublock.ui.new=New ardublock.ui.new.tooltip=new program ardublock.ui.save=Save @@ -21,7 +27,6 @@ ardublock.ui.upload=Upload ardublock.ui.upload.tooltip=Upload to Arduino ardublock.ui.clone=Clone (rightclick-Ctrl) ardublock.ui.clone_all=Clone following (rightclick-Shift-Ctrl) -ardublock.ui.reference=open block reference ardublock.ui.add_comment=Add Comment ardublock.ui.delete_comment=Delete Comment ardublock.ui.organize_blocks=Organize all blocks @@ -31,16 +36,21 @@ ardublock.ui.website.domain=https://letsgoing.org ardublock.ui.website.tooltip=goto letsgoING project-page ardublock.ui.lmssite=Online LMS ardublock.ui.lmssite.domain=moodle.letsgoing.org -ardublock.ui.lmssite.tooltip=goto letsgoING online-LMS -ardublock.ui.blockReference=Block Reference -ardublock.ui.blockReference.domain=http://blockreference.letsgoing.org -ardublock.ui.blockReference.tooltip=open block reference +ardublock.ui.lmssite.tooltip=go to letsgoING online-LMS +ardublock.ui.reference=open block reference +ardublock.ui.blockreference=open block reference +ardublock.ui.blockreference.domain=https://blockreferenz.letsgoing.org/ +ardublock.ui.blockreference.tooltip=open block reference +ardublock.ui.website.repository=https://gitlab.reutlingen-university.de/letsgoing/ardublock +ardublock.ui.website.repository.tooltip=go to ArduBlock Repository ardublock.ui.mode.expert=Pro ardublock.ui.mode.expert.tooltip=Mehr Blöcke und komplexere Funktionen fuer Fortgeschrittene ardublock.ui.mode.standard=Basic ardublock.ui.mode.standard.tooltip=Die wichtigsten Blöcke für den Einstieg ardublock.ui.mode.sim=Sim ardublock.ui.mode.sim.tooltip=ArduBlock Basic mit Simulation "letsgoING-Grundlagen-Hardware" +ardublock.ui.search=search block +ardublock.ui.search.tooltip=Search for blocks in the drawers and workspace ardublock.ui.serialMonitor=Serial Monitor ardublock.ui.serialMonitor.tooltip=open Serial Monitor ardublock.ui.serialPlotter=Serial Plotter @@ -72,7 +82,7 @@ ardublock.ui.simulatorHelp.text= ardublock.ui.version=v2.2 beta3 nBF -ardublock.ui.appprefix.standard= +ardublock.ui.appprefix.standard=Basic ardublock.ui.appprefix.pro=Pro ardublock.ui.appprefix.sim=Simulator diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties index e35de1c..3278b5c 100644 --- a/src/main/resources/com/ardublock/block/ardublock_de.properties +++ b/src/main/resources/com/ardublock/block/ardublock_de.properties @@ -9,6 +9,12 @@ ardublock.file.suffix=Ardublock Programmdatei (*.abp) #UI #**************************** +ardublock.ui.menu.file=Datei +ardublock.ui.menu.program=Programm +ardublock.ui.menu.tools=Werkzeuge +ardublock.ui.menu.blocks=Blöcke +ardublock.ui.menu.about=Über + ardublock.ui.new=Neu ardublock.ui.new.tooltip=Neues Programm erstellen ardublock.ui.save=Speichern @@ -21,26 +27,30 @@ ardublock.ui.upload=Hochladen auf den Arduino ardublock.ui.upload.tooltip=Programm auf Arduino laden ardublock.ui.clone=klonen (Strg-Rechtsklick) ardublock.ui.clone_all=folgende klonen (Strg-Shift-Rechtsklick) -ardublock.ui.reference=Block-Referenz öffnen ardublock.ui.add_comment=Kommentar hinzufügen ardublock.ui.delete_comment=Kommentar löschen ardublock.ui.organize_blocks=Alle Blöcke neu anordnen ardublock.ui.create_refer=Verweis erstellen -ardublock.ui.website=letsgoING +ardublock.ui.website=letsgoING (Web) ardublock.ui.website.domain=https://letsgoing.org ardublock.ui.website.tooltip=öffnet die letsgoING-Homepage -ardublock.ui.lmssite=Online Lernen +ardublock.ui.lmssite=Online Lernen (Web) ardublock.ui.lmssite.domain=moodle.letsgoing.org ardublock.ui.lmssite.tooltip=öffnet die letsgoING-Lernseiten -ardublock.ui.blockReference=Block Referenz -ardublock.ui.blockReference.domain=http://blockreference.letsgoing.org -ardublock.ui.blockReference.tooltip=öffnet die Blockreferenz +ardublock.ui.reference=Block-Referenz öffnen +ardublock.ui.blockreference=Übersicht Block-Referenz öffnen (Web) +ardublock.ui.blockreference.domain=https://blockreferenz.letsgoing.org/ +ardublock.ui.blockreference.tooltip=öffnet die Blockreferenz +ardublock.ui.repository=https://gitlab.reutlingen-university.de/letsgoing/ardublock +ardublock.ui.repository.tooltip=gehe zur ArduBlock Repository ardublock.ui.mode.expert=Pro ardublock.ui.mode.expert.tooltip=Mehr Blöcke und komplexere Funktionen fuer Fortgeschrittene ardublock.ui.mode.standard=Basic ardublock.ui.mode.standard.tooltip=Die wichtigsten Blöcke für den Einstieg ardublock.ui.mode.sim=Sim ardublock.ui.mode.sim.tooltip=ArduBlock Basic mit Simulation "letsgoING-Grundlagen-Hardware" +ardublock.ui.search=suche Blöcke +ardublock.ui.search.tooltip=Suche im Arbeitsfenster und den Menüs nach Blöcken #ardublock.ui.modeButton.mode.tooltip=umschalten zwischen Grundlagen- und Projektblöcken ardublock.ui.serialMonitor=Serieller Monitor @@ -51,7 +61,7 @@ ardublock.ui.undo=Undo ardublock.ui.undo.tooltip=Rückgängig ardublock.ui.redo=Redo ardublock.ui.redo.tooltip=Wiederherstellen -ardublock.ui.saveImage=Bild speichern +ardublock.ui.saveImage=Als Bild speichern ardublock.ui.saveImage.tooltip=Speichert ein Bild des aktuellen Programms ardublock.ui.saveDefaultProgram=Als Vorlage speichern ardublock.ui.saveDefaultProgram.tooltip=Speichert aktuelles Programm als Vorlage für neue Programme @@ -61,12 +71,12 @@ ardublock.ui.zoomOut=- ardublock.ui.zoomOut.tooltip=verkleinere Programm ardublock.ui.zoomReset=0 ardublock.ui.zoomReset.tooltip=zurücksetzen -ardublock.ui.copy=kopieren +ardublock.ui.copy=Programm kopieren ardublock.ui.copy.tooltip=kopiere gesamtes Programm in Zwischenablage -ardublock.ui.paste=einfügen +ardublock.ui.paste=Programm einfügen ardublock.ui.paste.tooltip=füge gesamtes Programm aus Zwischenablage ein ardublock.ui.simulation=Hochladen auf den Simulator -ardublock.ui.simulation.tooltip=Starte den Simulator fuer die letsgoING-GrundlagenModule +ardublock.ui.simulation.tooltip=Starte den Simulator und lade das Programm hoch ardublock.ui.simulatorHelp=Hilfe ardublock.ui.simulatorHelp.tooltip=Infos zum letsgoING-Simulator ardublock.ui.simulatorHelp.title=Infos zum letsgoING-Simulator @@ -74,7 +84,7 @@ ardublock.ui.simulatorHelp.text=TASTER\n**********************\nlinke Maustaste ardublock.ui.version=v2.2 beta3 nBF -ardublock.ui.appprefix.standard= +ardublock.ui.appprefix.standard=Basic ardublock.ui.appprefix.pro=Pro ardublock.ui.appprefix.sim=Simulator diff --git a/src/main/resources/com/ardublock/block/basic1.png b/src/main/resources/com/ardublock/block/basic1.png new file mode 100644 index 0000000000000000000000000000000000000000..1a12eef429dcc5e5dfd4f835ad96ef45f42d5d43 GIT binary patch literal 1655 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 BB#8h3 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/basic2.png b/src/main/resources/com/ardublock/block/basic2.png new file mode 100644 index 0000000000000000000000000000000000000000..be2bd645209bd5657a0aae6c523a6a445c3fb445 GIT binary patch literal 1708 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 CyGMxt literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/basic3.png b/src/main/resources/com/ardublock/block/basic3.png new file mode 100644 index 0000000000000000000000000000000000000000..7127953f92db2e735c72070b7554d4dab16dd5ee GIT binary patch literal 1405 zcmV-@1%mpCP)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11o}xtK~z|U<(S!4<5m`izoW?-JYz7>MM!ETPn0L=r|7p#hiZz! zHnxSW`3$)bF&K#{wN|o{{;zb#y?^ad5<ma@KZgG!Sbwzwe>VO$gyZ`yt9Zk=x})=S zkY+iv#k#S{vMfB;AqYJB-3TGXH;Vl@ZWc>qr5N>l@D1Yk2urC*((L8kEATrp=V!+_ zw*AMY{)KSbCZo{j`?HhXSV~2f=Um?|$%~TNe8uVU<WEx);K%b%^}{zh*Sliaacp|s zh?D6UfctIw>VAVk>yJg7Hip*%)V3{b`)zf#F&OjmMXeTo37+dcJT))eCK>T2AxSeT zDZ$iAcEgaP!y%sQHqPWl$!xJA%L=4YwL-Q{5OkP~hlD|AxA)@f4N7W$I6px=Gjk;+ z^TnD?k|L!71g>M#jRFo2hPdt{%?}YyvmAhq=QY;mcWbh|An-ecfe!|<ydd6e*`_I< z&rkPAmu1C&zg(lWCJ20bUWhS<s*-Gzj4<%`2<JtKtQ5kCJ-5#Cf{V*rlu~%E!=T>< zpeRaK@s@5ByiHgsO_mprW35Qjg1c3WWeJWZ!^W9|@qjSs>?JdUVYXPaxLY%uulRI& zv|C%o_h_w|9*&ue2hZdyq|$Aw?ZFts|Gv&pN-;SYax@w4S-&W&M##4k&Wn;?F0LB$ zp6BxE<dDGcG}ijvurVhP98E^7;|-f6t0Un-11W1lQP8~0wr%WpRDt#VmP$&Z&}TXs z@;sw;yk;1+5_TPjK|k7!wKf!0Ns<&?T;6bYazqpbtx6PSMOjr3gz8wggoV@<QYswR z-c#mwv0{2SCh)z6!fzo->JnPJ@%zrU681cY>EXClz{TY)U#@QX>4!5M=g|sTmh<&? zK~YpM3R7C+P@fqO`wvMj=a-8s9LFXKe0sf*UN^#eM{`qEvewsWTJj})C}~AeKp6TY zX-2%+axki6uab&iFK;ngGamKnMInx3V_9_>xxAi}WjRl?yKP&1{_d1`v*mu1kY)w( zCL!J=c;1?`(<A&&GdVtmez;HA@Ar%k5eD#Fn*=CIxtqJc-=ekVVBF{U@St%<J(Qg1 zuq?r7&|@^{VT>V73+Br;Nt$tWv*7dj>Fdf{4p7#XZpkaHGT*i934SMPTaRzGd~mI> z<2Uvzr6{YH-TZe5A&4TM^G{PO%OcN<x*2%|VOWz)Uu%b-;RA#Xt9Y}k#oZ@a*?XvS zX;C!J+{~A)9aLGizl6F=G9aF}7flTNU4#&<;w@?ZT=vuZ9?|O3MNx5iHQSAqHk4(# zv*c*dB?=y`8ASnN4$IX&0*E3XtqkjUOOoYyp4%Y!^=5(6ib1bS$91tCi>i_=*Bi7p zj0W8|zsg+K;dnCUdVa^RU#=OC`a8Xfsv^GMayTB+?>$zWR>D##;!UzQCxjsMI}C?? zMuTW?&F^>|PY<}6Em<sM7R$K4+_CxYUsLAGb%U_q@mR+jW{cIn90bEbm*eUCK2FBt zK9+59J703QjJYFzBxl=ul>|UM{l%lTZtZX^OJG~pn{QkyMV^;bQsFrcVc0<kfs_hu z46bAE-J!K1FYA_3YlZ8$_`ciPbW~DeOr12_YOXPcG|Q<fiLeB&>k@W4jjekYwk!+J z`r|)A9J_AV8}m+k*JN3>*U-#$4Y<zh1w{x!6t*`*dote^_0Pg@zGON?vu1!(00000 LNkvXXu0mjfS*fUX literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/basic4.png b/src/main/resources/com/ardublock/block/basic4.png new file mode 100644 index 0000000000000000000000000000000000000000..2b8463fb1dbb95ec76e812b4d7ff6923956f542e GIT binary patch literal 1738 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/button1.png b/src/main/resources/com/ardublock/block/button1.png new file mode 100644 index 0000000000000000000000000000000000000000..72ead779b8c5362fadcbcecf66731aab0342d2f4 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^u0Slp!3HF6$A72>QY^(zo*^7SP{WbZ0pxQQctjR6 zFet7AVaAo4UM>O(N|v}rlmzFem6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCnnv<n8I= z7!uL?_QFQq1_Ooz8!r8qf64wv#_hS+&BP7*9Yt$@SF*SNEIlAUQ^<#N8B1`J=D{fm fUIwZ&FuBr;dzrmuYTX5Z#xi)i`njxgN@xNAUuZzZ literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/button2.png b/src/main/resources/com/ardublock/block/button2.png new file mode 100644 index 0000000000000000000000000000000000000000..52c4b01872ee06901f43bafd81eca75d763e0826 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^u0Slp!3HF6$A72>QY^(zo*^7SP{WbZ0pxQQctjR6 zFet7AVaAo4UM>O(N|v}rlmzFem6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCnnv<n8I= z7!uL?_QFQq1_Ooz8!r7n|N7Vw)sl5nWZ8Z<X<Xkmzr0{ZJo}%Cng^#Ocp0e95c1(% g#uD6w$=$$sq>_32(Rrp#Kw}v^UHx3vIVCg!0N(jTXaE2J literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/button3.png b/src/main/resources/com/ardublock/block/button3.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0f31dc1e3d4a268427bd0c7ea4ea672aec4c24 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^u0Slp!3HF6$A72>QY^(zo*^7SP{WbZ0pxQQctjR6 zFet7AVaAo4UM>O(N|v}rlmzFem6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCnnv<mKt& z7!uL?_QFQq1_Ooz8!m}gbA}g~&DBnAKe$if)Yf;;Wo4dSXRJ^0GEki%<ioj)CAdlR d;FJVRZjO&IQ<3&F_i~`A44$rjF6*2UngF6MKV<*_ literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/help1.png b/src/main/resources/com/ardublock/block/help1.png new file mode 100644 index 0000000000000000000000000000000000000000..5080c8c4c47a97650ac94413b9c830de5360d5fa GIT binary patch literal 947 zcmV;k15EshP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H1129QMK~!jg?V8(96G0TlzuF6Q+wC1GmjYS}4TyjUN)&?82NM$z zebW%b-{i9|Bu3OH4T=vMR1|_Dmq3Kta4C^egqG4$+5+AB1hH(3bUNFnNx#Q$JLjBV zX3os)rlRNX-bazeI+N)FQdJHh(~{5(77Fjf`Nx9|j~~Hs7@^QUB$6|b=gFYcDp6)M zK*8kGOqn`>KM=&UZ3Q#)4y<o_@xL9RtXPk$4OOTymqH{GrJ9}`V9OW4(AX?y=2yT) zPrs3^INexrj>24SME9*0u!_`Xgs2DX4i_Hx4PtuEkyP>jYQf>clb0Xh3j~SAABqUT zzY|1+<KjM(O2jD8t6?rT!dzAegO*LWRJMEpJbgV3jw3&cs5G%uEJmHR95v<=oGU#G zi9{Upe0ygXqm#cdHf86{m}|p}@!18mT&yI@of3dlDnV<51y|~;pk(qA{!XoAaJ#Jm z=S_v^ANb0fy>Bxa0H~@c!kvyw(5Mtijk(rTjnCibV*CyFHoU$-Qn3z2)C08^6CQT9 z5hc8Q!5r83Z10eiLI#j0BVT!HmVqqJ_}yTbC|=sH5*!!BL4?19G4jMcbdu5z@Y}Ts zE)IZR!xF_yJHVF-8_zQp8K7nvqIhWqnEbf}+oF@_w>DacW2OyY!QsNd&<~z(HJ6~a z(nK7W>UBDi?8|HDe>=i!UW1lJ*UjdXVhcV4N5vmRVtlodLC@WGF!{2S;tM(hc83ek z;#?h63OOF#>wtz${vbRq!2niWZoC*A;TO-!(c9etokmF|k01bEe*k^2hOxJI5aX*^ z2EF%hKud51NhCpfVDRG<LgBp_kI9#zr>mW6@qhpTt1dU@msVqwh(vhM*@gn0igr5s z0Jh~do>y<JfXS$*oeF>e0M2y}&$Ct*(@t|F>HvWd|5~h5kzLeIBkBO5&_2&Q{*Fvj z)B)msW|2ySJMgpq+i2DUP(O*A>&ys-Vh=HyR7yL|k*EV)Z?e)3d7`p@31vM1)g{D5 zIK25Z!Sh=it6|UzbC}Tuh(<9!yU6ovEhfPLvVIBW05Yu{K&B<i{Z}Hx$^m3re*vuN V_R~n7*l_>=002ovPDHLkV1kr4qt^fc literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/help2.png b/src/main/resources/com/ardublock/block/help2.png new file mode 100644 index 0000000000000000000000000000000000000000..ade6d6e97ea7296a870e1726d0e3aba786998737 GIT binary patch literal 953 zcmV;q14jIbP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H112#!SK~!jg?U-LkQ&Akpzf*TzYjeAsn{A|J=3Eh*OR<tnE3ilk zjSQlf9s-dhdMyengedAgQtY`Xsgxo^i^QT_nx(0j`Inskmd;IGx@%7g^G?OHbGHWj zKK|hTzP}IW{Lb&(BWmqxUqA>eBG?7^t1v*Y6-6`I^o$!n2Zk|dv%@tr3#ZEsMjQ#5 zR05qwiIhY=6mls|OaB4v4kzlZ9jI^YK>yGfxP{fv1miY6j%8c0&zuaANaU|QM5L$C zh<y@|UVTKpwG$l2t^0ekaSKY$9swJ(k;HyUL;%h0y|`WW0`ne^U*=ks0;QKuL#2=r z=OAk0Ka<WCi)WZ9#Ou^B8@Irek^sGyU2&_7*e7x8!833i`6!~&#Edu!S?NaXF>S}L z<ajV*@3i9+Q>c2|gqQEX^0r&g;3#SuzTs$=naJBOfM`aHyc`Si4p>$_UDQfB&J|?C zl#+lu<yE}Zd)?3yc!1qI6LG%q5VWe8b$xT<a2hIWK6}LnhQ={scdRSdqKJB6Z>j-T zit>pJb2Cjo<F>I0l2XV3q!Nb63;<$TIV90yUVO?qLzFMzR|$?=z}!6l1dEYvAj%hT zfX?3E@Ob!xPp4st@&z2=d99TfOG(rtmX#Cb3n)O{r#4tyfAQjZITqra0Rw31=tJ4# zT3$TEl!VMw194ue*Xfni^rHuNE2??TtJkt9K9lQLZoyYzvG~7p^ImbaQjTlICn1+g z{K_xr3N*L(`n)=*6f#^dIRy>DAY3lN0J{2Yxc9J{SG<~);l_nRY|<#H_y__pYImUY zekEqzb6)XSR*st&3!zmhsCfy}0~Jr-!8PsnipixCTrDo3T09^CKv$m)jji3@CJ_<1 zT$GQ^acbIj^Z~xK@ds6Q`VJVj>S$X55CEXNf0!4`FelNrSrT;shl_tLj#JY)aeRq7 z!1Cq=fM`azaYG%z*Bg;o97)?|Ng@9>8u9?tH)rmCGn~sBS;CP2L$4*`x6%JaA-{z} z9)M~Ocsv}+pVaZ<#}B4KuO)kRSW9#PI1X<<eCNe8Ee62=LVgQ{0fMbCK(G~_#KBe= bAlUi`+uQenZW0yc00000NkvXXu0mjfYj~^7 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/help3.png b/src/main/resources/com/ardublock/block/help3.png new file mode 100644 index 0000000000000000000000000000000000000000..278cfe04c8383f49665237c7933d41e2ad39ed60 GIT binary patch literal 836 zcmV-K1H1f*P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10>Mc{K~!jg?U>tc+CUJ7|6Q*!#s?10p^-?^T=k}p(--MG^erp( zkTi)x5{LoA+FskesL}>(LbF~QS>nGOiJAGB!w!&7pTA^iu;{K6D62iduEkV3OOg~k zjKCv-BuS7aDF`9ZG>TS>p<^0gnx-;jd4O0Xc$x<Arvbt+#<q>nF%5Wq2VKVmK+1-f z2Z&;U(W4LFUm)9>_CGC_Ar{LJ6RVBkI}ePNtBBML%mR+D-*55c2X9LLrRD+0x63=k zB9Z$1v!noo5XiFP#0eoV3>~)BhHbTBv=}zEN)!wHydFXFI{=_)h$$iHx)xl=gk`ot z>1x8UNboS8Vmz7WD#m$?u|LP4XG_H{1wbi<*SF#ITrjq|m^#yNa@2=ywQ+g<kgML~ z)2w~~$1-tp+(%3Qe;1Br;$Yz5{&Biu55pKyEZ*enSyD6LIu_1{hf)DIebaF)WKxj> z(5U?W))~vq2mpvgZX4BqN@PIM0@Ea4=-L4moENU(KkN4GsvY2dJj>ZSrU9Kb0AS(= zn9Y|tyVrN5ebxpr4>)e_#yPuVo9H?nX}?O(=}npiOI+RLA26fEFg)=}`L4VI&&j9h zYVtbM@P2p%jh0KH(hAH1UU)j_OvA<5F?5NCa9x!FEO~^hoBMq7x`vD4k<=?*q)Gtd zSm4L6Q9;`<T%4*)9;j#rZbuU&NxEXwD8>1y-2L>Llmjezgz4I@Cm=XKJw&^us}83g zU_E&N=yff0+J@>-04f0BJj~e~+f*IquapCbwcZB+Lvi1~lyZPH%>$4UzaO?qIY7~^ zPe_9R>Q>_cluy^7XXgf)mOR*AlX8HAfvei(t7?1;H6B1|3uRe`+q+55?hRb&e;u|- zF#s_3=Q+FUb}9pCd<*RXcC9_YuBCJ}P)hLe!<kB#+hf)mtpe=<cCFtWN$BP&2O$#x O0000<MNUMnLSTYB26^NF literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/helpSim1.png b/src/main/resources/com/ardublock/block/helpSim1.png new file mode 100644 index 0000000000000000000000000000000000000000..5080c8c4c47a97650ac94413b9c830de5360d5fa GIT binary patch literal 947 zcmV;k15EshP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H1129QMK~!jg?V8(96G0TlzuF6Q+wC1GmjYS}4TyjUN)&?82NM$z zebW%b-{i9|Bu3OH4T=vMR1|_Dmq3Kta4C^egqG4$+5+AB1hH(3bUNFnNx#Q$JLjBV zX3os)rlRNX-bazeI+N)FQdJHh(~{5(77Fjf`Nx9|j~~Hs7@^QUB$6|b=gFYcDp6)M zK*8kGOqn`>KM=&UZ3Q#)4y<o_@xL9RtXPk$4OOTymqH{GrJ9}`V9OW4(AX?y=2yT) zPrs3^INexrj>24SME9*0u!_`Xgs2DX4i_Hx4PtuEkyP>jYQf>clb0Xh3j~SAABqUT zzY|1+<KjM(O2jD8t6?rT!dzAegO*LWRJMEpJbgV3jw3&cs5G%uEJmHR95v<=oGU#G zi9{Upe0ygXqm#cdHf86{m}|p}@!18mT&yI@of3dlDnV<51y|~;pk(qA{!XoAaJ#Jm z=S_v^ANb0fy>Bxa0H~@c!kvyw(5Mtijk(rTjnCibV*CyFHoU$-Qn3z2)C08^6CQT9 z5hc8Q!5r83Z10eiLI#j0BVT!HmVqqJ_}yTbC|=sH5*!!BL4?19G4jMcbdu5z@Y}Ts zE)IZR!xF_yJHVF-8_zQp8K7nvqIhWqnEbf}+oF@_w>DacW2OyY!QsNd&<~z(HJ6~a z(nK7W>UBDi?8|HDe>=i!UW1lJ*UjdXVhcV4N5vmRVtlodLC@WGF!{2S;tM(hc83ek z;#?h63OOF#>wtz${vbRq!2niWZoC*A;TO-!(c9etokmF|k01bEe*k^2hOxJI5aX*^ z2EF%hKud51NhCpfVDRG<LgBp_kI9#zr>mW6@qhpTt1dU@msVqwh(vhM*@gn0igr5s z0Jh~do>y<JfXS$*oeF>e0M2y}&$Ct*(@t|F>HvWd|5~h5kzLeIBkBO5&_2&Q{*Fvj z)B)msW|2ySJMgpq+i2DUP(O*A>&ys-Vh=HyR7yL|k*EV)Z?e)3d7`p@31vM1)g{D5 zIK25Z!Sh=it6|UzbC}Tuh(<9!yU6ovEhfPLvVIBW05Yu{K&B<i{Z}Hx$^m3re*vuN V_R~n7*l_>=002ovPDHLkV1kr4qt^fc literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/helpSim2.png b/src/main/resources/com/ardublock/block/helpSim2.png new file mode 100644 index 0000000000000000000000000000000000000000..ade6d6e97ea7296a870e1726d0e3aba786998737 GIT binary patch literal 953 zcmV;q14jIbP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H112#!SK~!jg?U-LkQ&Akpzf*TzYjeAsn{A|J=3Eh*OR<tnE3ilk zjSQlf9s-dhdMyengedAgQtY`Xsgxo^i^QT_nx(0j`Inskmd;IGx@%7g^G?OHbGHWj zKK|hTzP}IW{Lb&(BWmqxUqA>eBG?7^t1v*Y6-6`I^o$!n2Zk|dv%@tr3#ZEsMjQ#5 zR05qwiIhY=6mls|OaB4v4kzlZ9jI^YK>yGfxP{fv1miY6j%8c0&zuaANaU|QM5L$C zh<y@|UVTKpwG$l2t^0ekaSKY$9swJ(k;HyUL;%h0y|`WW0`ne^U*=ks0;QKuL#2=r z=OAk0Ka<WCi)WZ9#Ou^B8@Irek^sGyU2&_7*e7x8!833i`6!~&#Edu!S?NaXF>S}L z<ajV*@3i9+Q>c2|gqQEX^0r&g;3#SuzTs$=naJBOfM`aHyc`Si4p>$_UDQfB&J|?C zl#+lu<yE}Zd)?3yc!1qI6LG%q5VWe8b$xT<a2hIWK6}LnhQ={scdRSdqKJB6Z>j-T zit>pJb2Cjo<F>I0l2XV3q!Nb63;<$TIV90yUVO?qLzFMzR|$?=z}!6l1dEYvAj%hT zfX?3E@Ob!xPp4st@&z2=d99TfOG(rtmX#Cb3n)O{r#4tyfAQjZITqra0Rw31=tJ4# zT3$TEl!VMw194ue*Xfni^rHuNE2??TtJkt9K9lQLZoyYzvG~7p^ImbaQjTlICn1+g z{K_xr3N*L(`n)=*6f#^dIRy>DAY3lN0J{2Yxc9J{SG<~);l_nRY|<#H_y__pYImUY zekEqzb6)XSR*st&3!zmhsCfy}0~Jr-!8PsnipixCTrDo3T09^CKv$m)jji3@CJ_<1 zT$GQ^acbIj^Z~xK@ds6Q`VJVj>S$X55CEXNf0!4`FelNrSrT;shl_tLj#JY)aeRq7 z!1Cq=fM`azaYG%z*Bg;o97)?|Ng@9>8u9?tH)rmCGn~sBS;CP2L$4*`x6%JaA-{z} z9)M~Ocsv}+pVaZ<#}B4KuO)kRSW9#PI1X<<eCNe8Ee62=LVgQ{0fMbCK(G~_#KBe= bAlUi`+uQenZW0yc00000NkvXXu0mjfYj~^7 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/helpSim3.png b/src/main/resources/com/ardublock/block/helpSim3.png new file mode 100644 index 0000000000000000000000000000000000000000..278cfe04c8383f49665237c7933d41e2ad39ed60 GIT binary patch literal 836 zcmV-K1H1f*P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10>Mc{K~!jg?U>tc+CUJ7|6Q*!#s?10p^-?^T=k}p(--MG^erp( zkTi)x5{LoA+FskesL}>(LbF~QS>nGOiJAGB!w!&7pTA^iu;{K6D62iduEkV3OOg~k zjKCv-BuS7aDF`9ZG>TS>p<^0gnx-;jd4O0Xc$x<Arvbt+#<q>nF%5Wq2VKVmK+1-f z2Z&;U(W4LFUm)9>_CGC_Ar{LJ6RVBkI}ePNtBBML%mR+D-*55c2X9LLrRD+0x63=k zB9Z$1v!noo5XiFP#0eoV3>~)BhHbTBv=}zEN)!wHydFXFI{=_)h$$iHx)xl=gk`ot z>1x8UNboS8Vmz7WD#m$?u|LP4XG_H{1wbi<*SF#ITrjq|m^#yNa@2=ywQ+g<kgML~ z)2w~~$1-tp+(%3Qe;1Br;$Yz5{&Biu55pKyEZ*enSyD6LIu_1{hf)DIebaF)WKxj> z(5U?W))~vq2mpvgZX4BqN@PIM0@Ea4=-L4moENU(KkN4GsvY2dJj>ZSrU9Kb0AS(= zn9Y|tyVrN5ebxpr4>)e_#yPuVo9H?nX}?O(=}npiOI+RLA26fEFg)=}`L4VI&&j9h zYVtbM@P2p%jh0KH(hAH1UU)j_OvA<5F?5NCa9x!FEO~^hoBMq7x`vD4k<=?*q)Gtd zSm4L6Q9;`<T%4*)9;j#rZbuU&NxEXwD8>1y-2L>Llmjezgz4I@Cm=XKJw&^us}83g zU_E&N=yff0+J@>-04f0BJj~e~+f*IquapCbwcZB+Lvi1~lyZPH%>$4UzaO?qIY7~^ zPe_9R>Q>_cluy^7XXgf)mOR*AlX8HAfvei(t7?1;H6B1|3uRe`+q+55?hRb&e;u|- zF#s_3=Q+FUb}9pCd<*RXcC9_YuBCJ}P)hLe!<kB#+hf)mtpe=<cCFtWN$BP&2O$#x O0000<MNUMnLSTYB26^NF literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/new1.png b/src/main/resources/com/ardublock/block/new1.png new file mode 100644 index 0000000000000000000000000000000000000000..cef4e6e8db912ca0443247b7e1c0e0e7ba6f7227 GIT binary patch literal 1227 zcmV;+1T_1JP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11V~9lK~!jg?U`LnTV)u>e{VnNC#Bd?gfbW(j&05%xM{|w!^CA0 zVuG4&7fZI?7;mQcUg?#$UK+0k3C1jOl3+ACmjUTSmy7{3Fa%^ELtw?WP+Dl$_IOcX z9#P<&)1)KzpPY;L$^Utt_kZ5^d7jf$T>0+0#Lk7J%k&O3LhN(_WCdgzSpk_wRzRj< zP(tqfd62umPAE@e&=Zd*$hBEG+jI<@#iTgKf5uiqj;uuSFN75*vD+*xg_rR!gt`3X z4KBX@Dt4<`ah!jHA^~e~yBxe!vv=G4TLYskg_i;F1wyo3?M#~pRRZ#IZ5%#Wv2A|; zy$RVmogy?B@#w@1qZ2bkR$>4I7sHHB%rN=K{HA_uB9<a6n(}KBAOUS1UfMdm%=!WV z4E;7uTZfmgJA1eE_XR?<eAT5%gtilqB!m#D2LXTpgb>>f?DH>b5}~RF)*yu7qxVkB zY)5PNa<q2)1rCozTzsoRaZNligG}v7XsZE9qP4x7*7j~@eL(<*#vahx-c84i+lu4) z{EKwm8dT(?=?WnP<5P1$YRCZuLlMTO<|v5dsS24$Bo*<s36Lb}>#Bj&Yyj}M^Qo_^ zCiic5`N*M4_Ei*b8fs|l0n>AS7M3E4wxGF)PaUt3*~&Zxlz9qdwwmg)Eo1!|3^6_D zC(mwGv<Gb`Kx%LS*sW#^20hVOoaL1$dcBTZn+1Ty@G{9n5{o4VlhMedM1pX51q3)( zPfjf~36OwKTD}3`!kZ_k*j-5P;5grV`zdhcap~MC04`tc!XFIL)KJHZhpM<g^^ngy zyy$d-4=<hGB*WHtV%n%$XsZF>{qv0gI9Bg&-GMz+mlvVeKYlkCnqMK2Ok%U73cK7> zu<9qYqzBSa11@K-Y;88>U^eB*Y)*&#o*RvZ4Ss5&tp+5CYc~e~IQ(1{E~lNzX&=Mm z)7Wihj@9i0z<Ya`$npvYs!G^hv<shqkvoIq=!D?pKf0JwXsZDs=;<4wr*DLXP^ueE zKMc^*H$vaN$#vSDq5JgojWDx1tpkhUlwbddru2}8K~`B>2!Pd``kkBauu)lBD7!Xg zMZ3s%Sl4^J)ncNuv=E(6dk@h($j&#PklFTEde~p-k=dG09+9m}3ZL5GrxyS3HY!OH zAAi;kz_~YGW{;<UTLYt9|LGUp`3~MW`x*eBesK-|!V<3^f1Vc(RxtMaELXnmK__&4 z@NRSF1Rw;lSR8<4GW8XiNJ_+Faia0WIxY4nK`a(0vC2uVa&)>3&jA6PX{-mp?Q#N8 zU0zI{-HO>{T<0}4)Dn%xDRQSc#qNC0G}dQc0Kl`)l*raDryZBmF0)mYJ}q0@t>z7W zYN1L%U}1@yy~AnQz#3-fgR1;g378Lr_~FO9suHFfiUb%9h7I32>4wp$SHu@P{BPEs pKghBIGL5W&Od~5G)7bF>{sK==bRjSMRb&7F002ovPDHLkV1g8?H(LMz literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/new2.png b/src/main/resources/com/ardublock/block/new2.png new file mode 100644 index 0000000000000000000000000000000000000000..6016caa608fca456fecee1d7d33f13fcd9826747 GIT binary patch literal 1258 zcmV<G1Qq*<P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11ZPP^K~!jg?U`LnTV)u>f2Wi(3ay3mVFy$hAZ|#R1G70DPSmLh zVN1XZW417}c)>JTf=10EZd|a$m`pcG#6**sd9fi8Wtm=#Fwq2bvtg5f84whKKv|&_ z))o43ylB83iNHChNr&=JdhtGeKHgu>dEbAU3f+CZB5PKHsEPCz)JYW9H~_2zL|W?r zk=8muq@|UUeC}cg?N@tc57FtOn4b@jXo}~JmrF6m>t*-&H^~B+@!V$IIW2pL$ry*r zeT#ADH1B-a$nn=+z+?;$ge-ssSuJLsFMfE{`4`)}aJg>*Fyffx-P7TNPy~>aVC0#d z`K!*q{Bw_F9Zm?<huGdTh`nc!8IKnL$D|v3&mg@6Bg@t;K)Bo<Rr6H=1Vxd$hGyy- zni(8+0Pxebe(D;U`J}OR#rhG)B*#AbQWb<M009sLA@mW2P)ztcwi*qOJ5@m_Is*$5 z1cAm6j!0sqySGugdz-923lPU%t&n{t?iwRg`Xp2Vh@wbseG|3yO$-iC0ML1@kJ|bs zK0bFzcE90qC+ENGkX57V6%v8#H-><a$pK7E&T#$45E(OOMLqq2fUJCVX8<TGDFh%n z!3aQ>HI=fGLQICZ#k^-9xA91R*0Q}iyZY!K8pG+Dm9+=ehxowWVo7XERvKHf(j>9s zqRlJz8g)$3KQxBf6fbKJssJElTmUA69$mB+k9VF~j~A_0L!vRXnaSx{{DB~bxDCX{ z=$QBUam{!TfaFA@s`;t_f}%*(@lOG$Ib4qI0V}N?-JEIuo(zkblW!deeRsN%u?ZK4 zDoS{6R{`C9e^S@bj7B4H{^XJ6My#m2<{DKhRZl=82%I`v2|$v`0Kii_@+i#9Bw8D_ zm{(I(j^7`^WC)p5UUoXCj#jSPt(TMPGq5owL9*7z#-NXlk;GE|@t()%qL<Vul{y~~ zMLz$!9e_QL6<|p=(K9f@m0$ZwFvd|<QUt(Pm#*NR^{}HLhuqAK439f$?dV1$XxP7Z zmnr~tP7JiP*=cFBGcgsqjRuCsX=$_5cE@jk*3NEP+U$#N?Qpt7b(eopGad+ok=b&s z02uVK0Hm0W*mA9;nD1H4+nkw3N}`dZgwQ!L#K&UGwW5uRTGCUlR2x}MRk<X#-ImRE zTec*2_@zCPb&mDkC3Q;m|Gq{=QDpy{^#Hv6%0BY4)A_c&i!UzxNJgre6V)#Q@cMga z8N2DCa^Dj?y)&P#-+t%)&n^%ZrQytpst5uA-Z>utfnX2-e;|l=&WG3MTg>y$`|!^B z@CQOU!JvqD&WA=5VIR;40@Vjg0l3eS1VGV4n@CD95O;?c9IAMd+g=};>B#_WN>8Qw zU}@w503O|%BUxLLO<0mmlGxS<@0YAiM*WgHrBVbicGE?3>(#JqU_pP3PAIBV1TgBD z;_Np+C>j`U$pX+tM-!)ySvgUKHt3>d<qK>3Z`S{Sk*xznTI&Fj);d6>wdMi-0>=V( Uan{1KUjP6A07*qoM6N<$g5B;yxBvhE literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/new3.png b/src/main/resources/com/ardublock/block/new3.png new file mode 100644 index 0000000000000000000000000000000000000000..64bbe05d58ecc824c4aeeb957090d3ac45d0805c GIT binary patch literal 1067 zcmV+`1l0S9P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11E@(vK~!jg?V0Ox+C~_LpVbk8AQ+!r)7Y81nat#JdLzAuUSof> zof5}R#s&-+86kAq{tz~nUB{M|4)K(Ch94|@(4*b&d%qpTFTegKdBxIJ{Q#<31FTwW zfK_V^uxh<}0Ha9fZvUFmcv5%~O@lNA)6{7nY+>kn;W?gCA%HkZ2&1_8B8E;JXJb2` zyBxQ7F^uJGej$Kc*_O#>tN!BtR|Aij1b|r>(K)+Z8bm1o%QR@cabMhjbe%tT%Y;yV z1>R(eH<^;8DF9&<<4vYa{Mk3h-9p51s<gfmfCNs@dz_y42!arRu{Y)PyvNt>;MwuB zFyfOUgc5*20wVj&i*g~dU&IUN2oxbo#lS*>kMG;Lmd%Yin;S0=a9BVbm57P&#>mR< zgd%{XbJnGE)+Goc0LGqA=d8<@%jaX@p@J}?do?OFM(GGi1QS01AW0LzB#aU!en6a< z<>r*dZn#PS0?AgZ0f1>{Q&k;{tyTj=Uu<rx>C$kWZ_YKo@$si2QJfTd2IU~$+ivDs zs*X+7v2$(BM(x>|W?_s!4Ka;kb&?_gceRnB>u8!FNhL{=AcVMkm?%z=Qex;Dnx>IT zNgO8#7CTo~iZK9x{QVVx<Ms}<YK7tGhKt@1+cr5l+6SO>)+G!h4t86#nl2MR;Pku) z0zUryqY}V(lSa!*F^J*hID5<1{3x`VHR^5!O)R|l=x}>}gt8-5b8JqI_YvZye*LtR zW5BlZ=~B})Y%9O9)`N5YZ+*&25kPX$%Z#VhtYeu5{&dFp#>X&pwl=a9+Z&8Yl7xm^ zrRvxOVZ`YA27zGrK^7}2#cEX0A9(Z!9??7-`O}d8z+-st4lul)&>wgNv&^ldD5gK~ z=ncmz%L7X=GPhO%K-aSKZCM6xt&&TRHOIy>^}DpH>pE_&QlMsiTFORtbhwjiX}HcK z*ZpCymHS?;SdYe))&Dz<g5>u<&jEOQxI@jcxf*(0_D57KlXq|T0Ql?E1z{AizrDdm z)8)pW^7%_2Ap{?OI$RxqM3AQQ>TzC0N(pHyN$ypZsg$ItyuGyD^+Blrx1wxh?SpLq zY|8?mQFky+16^AL=)rE2B!P;Zd4^-#v=6pff{&>i*_(PkU@g;lWL$1F-^VbtN8`$> z6hIh7^atuW{Jw%&SZZ7;fLR#dIq<4g2tX4Wy8hp0UaeqY6av`WX|lJYR=X@)uinVk l0ISv-VAWa!tXi)g;2%HVWx-22Bf|gy002ovPDHLkV1iL*@j3ti literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/open1.png b/src/main/resources/com/ardublock/block/open1.png new file mode 100644 index 0000000000000000000000000000000000000000..43f85f57414dd9c0caef96b98575edeb0374214d GIT binary patch literal 824 zcmV-81IPS{P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gs001Gs0W#qmi~s-t8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10<}p*K~!jg?U~(c(@+?PpOcU7vvXq`xC^}y5d;;63W9>*jko@N zz3@s9q2Ltv!LSRnTcxgB=eF*nXeVs2P4{6f-PW~9ywDDcc5Bv?hC+UKCwb2~zbEfW zPToYk8hdZkys{Oq9n>k&>;U)xUdspYT0X#8io{b)CRW^>0?n;~qqD0_#8ap3$M<f! zGLI`6h|aAsHob7#9*-@$mI>(qQ*&#KO@037xLXiX0j82^M*m~JEH@ye0Zb>;j7I0r zjgt)_1t6A8Gg5>3vSdQk4G^18Gwi^8S+XGN0{FC)VI*38&7UV35EllRS<3L%n8mj1 ztB2}^xDY@hmEny9^JUco;dm!bEUz;ZNg%rp9gi&n&Ub7_00+4|o7?-`zjdu@%$JQF z_Oto_o(lvt9^AfOweNAENH%xGrC?jlo*V)61Uq>4<nEa<FGoIB1!&cEo<6+eWXf~Z z(AQ}<D)7bvAf%7k*n&nhIe>iojRt7;3@9$7put7Gd;;k;@s)wzs^_{oYu})1m2`kd zgEwGM_Ndk6e;4vvK7iM1dH_dHq1}TV`J-bx+FI%B31Znc8(X^oT<-6tMc4V6J0zRS z6VP=A`nv(x+}^{qEPA_xbhfv0cwFGe{x5_OTpj2GV0$l1p>RT1XFEMz9W{G$lz~V* zMJQ}AF|!Q7$w`S&*dP=(*xAhjFt@T!C~WXLk~r=6;@vc%u)*rLEdVl`-wA~co)3LE zjTxRy5(*o{7rr{N)ci|GIQh+5Dw&wJg(?&@O$DG(ECLYFbp&8q7A4a}2!+7km}0Sn zg^jMLD5`>G*%ZwZ!WIMqe^znPG_foTRZ-E@+OMmldqC4vG}MY?ExKOORuu(RsWhPL zmD4DSphc<dr>iQcm1EbUre8unfY<T?yp|8(wSEKYZ2(wR4ZK+Z0000<MNUMnLSTZL C!Eks0 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/open2.png b/src/main/resources/com/ardublock/block/open2.png new file mode 100644 index 0000000000000000000000000000000000000000..399c91a35f00182cd66a77238b2c7b961b3bbb1b GIT binary patch literal 827 zcmV-B1H}A^P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gs001Gs0W#qmi~s-t8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10=P*;K~!jg?U+kX)KD0PpSCkC5EO<0iLjB4abe=l#6(wyjSE*M z?%ewqx^d~k)g(q-fM7xbGzJ(%5xEEwE)ql|5HBor)F3w*MQ+2)v@Xa@oWL+srlo1p zcXxWe^PTs}cg|@~h1vNJ2CkK0h)!F`Pln)f0Pp~umIvUpJb=U0+B44MzDYZ$z-L$D zj)5s!pHHOP*K04>GLJ14=p3BlQP)VS-P}EDTO}+9=p1}QQ)p!0bGslc1qi*IrYZC) zW4|2`mH~7PP1D#poHfpB2ulE-487%HM|Sf`SqYK%DbzhYO@j&ZNi}zm0{Nd#c~ziy zY=(x8%xgZItf<710bY#F@IV{DF!H+(<qL5nfWGlr>MSsyR6Y=<0s1HAsB7!D%zRQu zg)p^=m)F*r4=+-C@m$83cb~qo^y|-oeFci2tC!Aa9J{q0Wi_%vd7wCFPo@AW%T99Z z#+5^3?lwNn2vAg@aP!(_GgD^Ov3^dAHq3Uc00M&LIgb}Wa5(^OuYf4J9l(13?%xBJ z--*whK9#XAP?Gx#Dpv{a{yXjc7jj-6fYWk4fT?42VL8I@jV(%xi>Rs$pzAsxzy1WE zrn-VcMP?=PmzBsmg^El~bp-&Q!;8cd392drl%6PJeRG>1OKXUNz}cEA0KyBaZ0<xU zFD<6BtR!borYg|VGmaY6XzP6qz)m!V8q`pO8sUXi00t-LP=gxxTKZDs?$n1+gBnwF zUjUey|Bf2exP8Ap6;t0ngc{U%HuBz#CHF5OQ!ldJSe%5eBZ(rie{c0|M|S~GWIv)H z5KknC#S@5vh$8RBM0aE8hJoz!AxR>-ZV-*d5D+L({Asy;l7!zU<qTkI4<t?huR=vm zPbf+Fq;vy{>`!ZpqOfn=LAi60>z9xR;Iupdr{w`St$$~7`kulz*Gm8Z002ovPDHLk FV1f%MX(9js literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/open3.png b/src/main/resources/com/ardublock/block/open3.png new file mode 100644 index 0000000000000000000000000000000000000000..725a8ccaefeafe44a0eca8f31ca70fc79dca3309 GIT binary patch literal 704 zcmV;x0zdtUP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gs001Gs0W#qmi~s-t8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10zFAYK~!jg?V0Uv+AtV}ADaZmwyG6dH%;1I?MikJyUb|XBA_&Z zga8Hd>HWx{1wosDLxhy`kMQF6JUVs~8}Z}kFU1v0)@|TiH2`(10jOIIK;5boU^EVJ zCP9@gFsd5Z^=3T2F#qM#Z6$pwNx=1H4BhGW^FxJ6Xb0Fgzfn~XS^->de$f0zRX}J1 zaQ!($*MGB4H-wf&Jobv2-{@hS1L#=TXD2ZB=L|}i-$+*yX8}xt1q0{!oPSF?AWoh_ zlj(x~qYs?7A3AqBos_^N&|`k1bCM{XfEPS57<nf(drhY%Q3@c66PD|c-tEVuHS^_~ zC{7N3C#B%?-ObV8rkNs+Q%ti}*i$KhwrTMFYwy*Xzr*oSfR>beyT2>b@=aa#bz0~j z@}dAj=_j}-Kn4CUoInL*Hfx}aL<NVK7fwKb1lsq+@85NfH#3Sqpo&U6z<uuqIR3QN zt>#>)ZZ!aP>*@hY-G#y^AxRUAmO-a&pinGVApqS@8!07Gk`TuUQcAj=HUP_Ygi;xu zwu#Ydk)#=66aj({-Tbz@3S+V?#WW1sW^r4k5*UrAShll0^UP9(Wjk25!zzpc@Pj8T z+oAtr*Y;<S*UT1c02a$NmhJGn?`~^`j*n$KO#DR|OV>YzM47)?vrLh1<ONcS|JSm7 zASn@mQVOLM2!RxPH9{bS00o)KcE?c)lzOfys8VYnZzlGx?S^>Bz<vz^q}aVCg*fS5 m>FTFY15mdbfV$NH)UAIXodwAP2yuY`0000<MNUMnLSTZeMlc!x literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/pro1.png b/src/main/resources/com/ardublock/block/pro1.png new file mode 100644 index 0000000000000000000000000000000000000000..9218d808a9bbf5cc0c983b96ec29a97ce496c852 GIT binary patch literal 983 zcmV;|11S87P)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H115`;wK~z|U<(S=XQ*{`}Kflv8?drPIwVY~KNIPUSi`ksP5#mgy z3AhN+1P$Q=6EDC!Z@u<^@DG3suZ&;<Ml&T-L?nZ4aZ7m_Ov<ohFSgS4b?wfZ7sDmX z=>*PMamx4ZJm25%Jm2s6o%1|Tj`(8eXOm|L(!VX>Y2%qQ++=rSu2ACK@Q5Yu^|%QK z19T@k*w)tSNL(Xe+wh92kxI|k<!<mh7srwe_U~ceD_yq5H3GH`|BV)(mrqU{0YK9Y z9xN5OG=81QsT4z(#@Qa(#`YH!$3iy?oB9nmxg^4&0EZ8}#*T=BX`1|cBlVAaG)>3Q zjk=twX&Z93HE!zN9zqB~XRMv{e1>c;zZO4r=6f{V;P{b2ei^^cSaO=BVhJTE^YI7o z0<c`Iap7u`Yq#%Gs#F0`LIL)6C+O?xL?9e#YlvZhdd+<yn?qG~z8)T7;^rNcpv>-g z6z$<DR;o2le)%1lTpqc_M{n1Qtf(r}Gjn`%;R>^h8Qwe4??_ie44bCOZ!>cMC_#B0 zryDv`sWcxQeVg`hXdO3nag0nZPiH*J(L)2cT`mCrTq<(%^bnIbQ*_3nbnlMa*0!nN zu%;U<W^;UX{xa!>3_=KcyLMXEy}7T~VzyGPk({1E5`u#ReQRa`LIFPmdwT%5GCAc) zqvI1URjPdY+2@wHBnbxl_tdS>yJ8VbEIpUO&<$eIFhSXG;a~3B$+tg^a(^+4s_W|> z$dkaaVVC4077edm`@9~MpiFlnPAFg<JOl#S@3X}7r3wIn)|R??JZ?8WuZQw-l~Q?` zwhh)j3XTmod)<6^c>iOsmm~?7WIY|jTrFH~*T#~XnpXGe4qDZgnWcSR4*-Qyxh`** zCdKmVTku@7$9A4AV>l8H0x-LfMb$J5e{XgX!!T)UZK2uwKQOGc$+U+<RH`*bCe~MC z!!Y^r>LdU?i4I438a8;?!NGw(PMtZ=@Z|~e#R`dzD76)p(d2FJ-T#B2?5F?LmmKBT zQigX#6pp>~24{a5VKjM*(d4Z)E*^cJ_uqOQkK64ihp_vLM>llx#bqQ30{+Kq5le+K zCgvksieZ?f=QBJg6mbbbBpk9#Y<6MW@P8Fsrf5Aa`~_H+CIHy&{B!^S002ovPDHLk FV1kYP!tDS6 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/pro2.png b/src/main/resources/com/ardublock/block/pro2.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed80bce4d9afc2aabc5cfd6aaef77c450742c1a GIT binary patch literal 1019 zcmV<X0|fkuP)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H119(Y9K~z|U<(OY=Q)L*&f9JGY)9w#j*Va?kF3?Vqq8JL<g$`MQ zq6yJmutXz93|??ykZ8Qo1i8V)OX3nkVn_&*EM_67LEIG0m|H|fYTN*^%Th+DgtC@( z-O6@){&+E*j#CiNS#ip9ci!iH&-*;*%lExsj&OE(ROdc|_-_li*SPNt+sziHGUM#; zIBtl$oDPDLm-Xu&VX4n;Nn9yl+VJ$W%wRlGlsonF1&(~v&$iZ$Y;I{XEv^(WZTJr? zsd8~(@0$Q9s>+pAhNIv9K<~g12R}Q(gUjl9Xj#2wp$mlt-NSa9jiBGl&aKa}VtD{v z*Xj9j@QyWdK|xiu;+$N#EoWNeg1+r01VLcU$}qnsE|W}+&Bgb$e?mb~*}Ll%KL73% zU-!qjmdO&3JnVaC2LO}#8+3N{(HA>QHkSt===bt$^ID#MB8n&omb8_`Fo2G6yeE<= zWVyipPmj}cdWeAJAsT5!QB(jXrt<9GcZg&vO<hejElsPLo{@?DGQ!85UBpL|?A-di zC0!*ktm`^IogV?9{sGTCPEl0`2IGA2)~keq{(0QNqbEqF(nKR+-rn9udD*PIE7vmY z{_qedPY<zXWtisZD%08)bPpF4mC@u?+7Ew0{9+P85NK&yZOD6Z^9F<2iK#sOv2%!` z$o4JI%$Wu7d)>5cS`WZiy=N?Gw7kOET%NXF?;GNxD6*|}W6=}(v4=y3SUizLRW%~v z1|(0df#1;dC<l&oGd%hmazUB*LH-FW8@AhQM8XYo&y^KU0+NU3XoRJ{IzzrF2zY9% z4e|8&1OVQ;B}Mx<9pzM2xR{unVmvpA&s}3quc@lPpu*+gz1Ls5>wHlZvD<8hxT?*L zABVl{wzcJDvvrDMepD@*yL45B3xKhkD}5_8O(T<?1faUoX}Zs%F&qj?01RJDBFhB> ze{T2^nx^4%*HG#D9~iFp)e#E%$>neGW$(Z|PSZ3xyT1qE$#v#O5|r@bVFs^l*~Fgq z!*m?$VeER2wUI`qXJ+W?k8ytF5|XEu)~6n~)MHT@Ua>sDyE|UsqmE;A_no1;@6VaL zs<DALUT($dD7Vx@F#C%~QB~68IYdFg>n=V@Zbd4S1@yliDVnBnA#s_j>Fd};8=-(i pK=RzN=5Ary@P8GH=FqxV_#KCQC?+2iTY>-p002ovPDHLkV1mZ8>*W9d literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/pro3.png b/src/main/resources/com/ardublock/block/pro3.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7164946a837fc3404bd4d3c30869d208b2ead0 GIT binary patch literal 848 zcmV-W1F!svP)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10?kQ8K~z|U<(Jt~+dvRS&q$WWvWyMJICilF2uVIDUy`rL7v>>P zP^7?)!Sb$Mnmn+i9E%i|FmV<4aauidudb%MCBA(9rg%fp{x^Zw#+wsd%9|KQG1tA@ zrFC7`kfuq!W+P3b5V>_Ax8O8QnY-Q-(K$EHkWO=#Mx&PZh_xWM;KvP0I-frr0icv3 z3?puwG2_XM?u~<GnOIi2FwvL7i{4=&1X7wDbedGGGN2eu=Kst|Q-xC5jY6rXV|h{7 z;cN)1wuS5Y1VQ+?dU4q$1x}9I44g5}Xi5~tNNI3(d;ma_B=iR(Cet}_oB$xDNu$2S z&Q1+cklC6911vk^1tCf)u6wtP$8)4Kkap$K#W+d0xa<;y5k{%RcCAXP6w{eYw?DuO z0`}W`g;=dguwpj5D`-+KR%)db)2YkJ`wmuFF2s6$haimDvMU_yx6s6$pJ5bne%WO- zo>8?c)VJ*1%wF^kE2Z#*kgM)3t{(t`?OJu|xmI&$No<@XOr~=Lf_AI%C>Fpp4EA=n z0dR(sLL3V_9LEXYf1ED|1az8>%nDt#t)(^33s6c?vC5bk{d>DsrTfdl^?g#M7GB6I zC@feAabJ<|H`H~cG^lUcnZyNP7|X{-Q4D}-W>eBMjgqbrCkb(!U}o&`926F;>l(+0 z?dK;5fyi*@p~Pw8>09=YSEN;K%q(5f@2G_LPX7&sB1+<gXY*iV1efoNnCJPK4!ZLI z6qrT{UDtD;voV6DX<(HlNt!Ykju(Rp`hy_=^^B^&3f4Gytd4f8!Nt!W{hJ|Slu)xP zq-lyXp5S^urfJY@)C--lQGzR0nfLqexa!?998DOG{`6eiDs#|jp=rfF%G`pbY4Gv% zaHZMy?07$8;9P`lTYNe_#Pxl`Faja4q+FWV@*=ljA;ikPFsuJ&Z+_=?WevZT8&kAi a3%>!UY6W)+WkVqV0000<MNUMnLSTY-k%M;t literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/pro4.png b/src/main/resources/com/ardublock/block/pro4.png new file mode 100644 index 0000000000000000000000000000000000000000..3f598d45274f271c6657746a0a275eaa02522a6d GIT binary patch literal 1029 zcmV+g1p51lP)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11A<9JK~z|U<(O}56LlEJKi9i!*OaoBjjcjWSW#Rf!LfjDn9PYN zaRY+_W-$K5#1S!*L~y*o#E4``1BkxSOcRvE#mr>EK$wXy7PrL&rLvH$fYNSrXIVEk z9BgYgx3=dC!pyh=dbdIipLh3s@0aKMy<hI0Uru<WY=_DNgz0`8xYs;zfhD~Q-MQJ+ z?%JZMk3`1^D!rU+IYW22-;lXfpgXY5YGFlzH>tMz=|XnCT88gvBgalO>o%7PbO*l4 z)oUXZRlWm&S(aEZFNdlPt68_Qh<#NXIrm#P=YH)nY;>lW(RX-aGRCEzUiKb2M*GE1 z1VLc^s^UAYv6y8fNldC)E#}*5dNI7i$xv05wzKCc^e!aN?V76B`}SawB`RtT@%s7~ z*i=@+{G2R8N`x18z7IgA-9~jqIcrOwB+Fq3AlTDOeNzh!-?foYjZM*%1O^ZgG&Qfs zjn!i2z*}2*WmPdDB|?k81G9X?hI95T8V=Rqal7an9O8KMX>1u5N|r5V|C^gBc+A7z zBVQWwm6E`MAW*XGaR9ph=$od=lEm}H1#EcRM<CQQP1{$s5s%wN>n{PSYwH-Fm;_+K zyd1thSi{TD714G!z^PWhZf`UC4x43({5&^@_q@i^d=ILsa=iJp=Dv@<I-v>coIQ&* zCCiB?5`0kCFclWy_ueaf+Ry~R*0s+X@@RO6vmADUO`mD%@puB?(Z-}-=pWlJXlhHn z9wbS`9|)pE1~mG&%|G$p8x=gUD31)YJnez}7YqlUjK%N=f>YPmMxun22&Y>8bYIpU zJQAu(WMD{BcV#;P2=`x2+9x_T&d~5Eb29B@J2MIQ59;!3IPmc37~9|d_+Q^2kH?ve z#k5Am8{_A%iHX~;y}7HhtbbIc%~^VAcog_&r*B0xnaG{v0N~H-qq_T~P2lq(1%QHl z4_1p=qd&D|5u#`!+&{?mk*MxIX%o0B+(#hPgTroP+e<5_X`*PNdea&JPX2JlP@j|? zJoIp&?i=cTyV<>c9S_ZQ(&F#HX3b!8*)uF({3uFffX^GhH`F7o0=Hl6WXJwbsNJ=d z%JNbw%S)%UpF1v5^Whgn$Hooy5cK}yktGRNwu3}M<?@x}qvTfR=Vl=w+;yagqKQK9 zLLPR_B^Hl!p;IBGMD*CypgZvYm9+V2-7EeEXUiX%k_>fW00000NkvXXu0mjfSKIBQ literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/save1.png b/src/main/resources/com/ardublock/block/save1.png new file mode 100644 index 0000000000000000000000000000000000000000..7fef52e879d9c405b31037a7ede2ca472ff60d6a GIT binary patch literal 844 zcmV-S1GD^zP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10?A24K~!jg?U>7J6Hye#e{*N<Odd^5jp@sF=gzeY5!2$bAWdC$ zp{@Os+y@jyL<rc0uZ1!yC{%=kpn@P>Sgf|GeT2rm=8lWn(nwP>$;4qG-)?5^IrsbS zIp?0aS9|d6xl4HAil7;E2rcXa=m`iKJpn-@^a2dO9p1Y8l)_f=*l*|0jWauS(bxHW zkAUm`-@e!d0e*Wt8C|G>kVim;J_4byfv~5LtNiwOGD05#&C7viyST^wCvPd2tIfyk zmQYRVKo<fjoA=H{%;Ls$hJpTgtCYNT;$$LD_R0nBJbX#%1QE^PD1}ow-Yy=sn4P-h zi9EECLL=!UH)ke^MNF@zO%ab;EL@vpFxBtbwyhfQQ$)lvnagGvN}X!UzU?CRLqx<f zS(wQ%njUD|M@PF*CnBPj$wGF5(ZSQ5Q0ROcZAV1ZGMUe27#(VV<qzOXAMhd~VoBz+ z8O{!Mw(<w?t&z1NVxRnkZ{)$}PJEJxh$Wey&M@X9dFaBg#Bm}l(_n5o!`N`j@9Da8 zs6Q$~N`vcHFEic+^5F4b$Sb~YY~j=$#z)R{YYP8wC61z#2GuG;e=pP%5HxxMf`+GE zsIXOJ?{}HLScFtEfpT5GtrY+mPA9RXWV={mr?`hHB_ru10INSXag-vJOwbpLP%2m0 z__d4Bw8Jg-=jIOON|pY;n5R>jrwG_fAIary?4?ftRI7Dzd7E6`X1%Zj!1Cu6a(SD@ z7w-@4?mc=#E^qT?WetFp)pc@to7;=8563)ywM;H=^X|h}FO<TcLY_Ktz3$++3SAQz zh7LfbRs+D45{><Xd);x+G=cedOs!T&;UaYdAvBb7sX28tSHm>-v$*CsD5cPaj-j`{ zuAXYZFmw#`hIf{f4bQp|=%SIpzgH<jXjr1rPU<@7jlNq!=u@aCAZYXi1dX16pz#O9 W0nl3CuW>;D0000<MNUMnLSTYod5Tv6 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/save2.png b/src/main/resources/com/ardublock/block/save2.png new file mode 100644 index 0000000000000000000000000000000000000000..82b4a232db173e9ae4c9d9b819f9f7b140fd1be7 GIT binary patch literal 839 zcmV-N1GxN&P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10>nu~K~!jg?U+q#6Hyd~pP9+bZ6>Lv+E$xtv{u`#YyX0qe*FPA zVrrLegw)1@AnpR{s-Qb@kb)o-aiQQsbm2l;6pLTAMr}$X{Z5n2xTr0SHYJlx90umy zh1_%Q`^>%foVg=SPQSJAtRzcz+d^%!B##4t58$?Z0Jr6NfPm8phpycvJ(u0}zcZ)1 zxODEUqw_hw0+#iE`(hmcoX)tn{1y0HK7dU*4}ix3Ow;L%d&~1%NV0RG$t)~#<IW?N zSJumq$u41*S%!e3AVm4z83~6Nj`z@dV1K2S>;V9L`j#Pi^8rh%<squkzOc^d&;YTv zgSO&qZ=sI%7Lr2)H0lj@L(6JkSZDNNzisnS<r#1iBBTq3<GsY9%~i!$eTbca2<d{W zgZ*?KX{|a(O;xBCh)__FjQ4Zm=%HFH)Lurbfd~Z!Bk?{uW3`zFhx&jW2>p-wlgAD_ zF|~7ztP%)4C>R-Z&OA8WiT8rggMusZK2F7)GY@rmmDmkJZ_pUN&`XztPku{vxzz83 z5Sq&6^F4GQZ>z^t_FpCJ=)>$Bg?xeTj%dB6aQ>^rPSw(&DwXHI3;6(U%Li~<wyIEi zF3YdwRU%=XXloOuY4Yy#cVM&j2Zcr^yF@0tNKj~Ww6_58{>u*v#Ujy`CL)bGiz{o) z{#-zjr0o(rlb&aJJx6mSZ0kyCYX$C4ydaS>Fdn}IU_F;7kupf63}({v06cv)MIvQz z>)w;?xa(sNNu&&3PkjVna{4QYltJ?L`1Y8w@n<Ab1{2TU*s<jOEo7?`Z{!OUO%p|y z(bUb|x0c%gKxitmBvB|9$rp;ql8n$c$K*Ehn3jc5Rb*MhG%a%ZJQ5NOLM_Q1P!!aF zQZaz7Gq7cPr-DK&O{gdYlu`piQ%io!vh+{fZn-Ow=eLj#;I@1Kx8(!4t>5+y+lo7w Rg%|(;002ovPDHLkV1n|nf*Sw; literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/save3.png b/src/main/resources/com/ardublock/block/save3.png new file mode 100644 index 0000000000000000000000000000000000000000..87a6fc4946e9c65cb3f24bf0fe069b114d3fd63b GIT binary patch literal 711 zcmV;&0yzDNP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10z^qfK~!jg?U~(f+CUIS&(7L7AXSyBfT|SQz%%tl`VM`?UQ{Y+ zWRa+GlhQ^6F#g$I7!V+cuvxH>{9W4P^>>)v9nYdZfB9-SV@cTt4pjwEwkm+KRRNSO z$M%5Vf8G<$;;r}IzG?93>eA}_tY^TSxGY)+P|Eg*udB*H*|HCC_8Cy8C8*ZGrcT{l z<SJxQ6mxt3NRp&GW0H9Hz30({Z$AdR&1g-x-K6I3Zz~so>pHaGzvIRaNYdR#cgYw- zl5EeBqczu8m$}SCfhkn?YV<y~&|+`)Ia<@}wD3GP_p^mu*o4qp=ysZ16fh45EMglF zS_{2)i@H}UJjOvk;UN%O=H@Son+FTqXb}i4La%eUd9YLm@<3>9&pcQxWcxs9Ep#nR zn^jq@#IHdt%r`8Wha-GSY=h9E=zeHgHxEbZ2Ua0OgzI*TM%_EctL!)R3oRf_YK~?e zjtBr8RG{`%)l!zN3ZQJAJwUEqD4fN_NsOa4Ud_c|7*9eV+i^sMSsW8ZF(R_ug~rnv z#-!A0F0R(ZNlG}Ip-{^$b{a+`X@cuGxw^7k8F+a7OWzN8czOmPO$>cMpzjAv!w7)k zzZd#`z~I-P<#V@pS<GlO0pMjkrSAva41O<T?t&qGKj3LN%46yLr;y6?H*1<2vV#+a zh?-x^ntLUJB5T}@F`yKp)?-8oSrDWqT_497Fb1U*D#r<Nt~HRoOl@3SPvSNMn=z<4 t%xa8Mg^sq*ehO6pWvc=xTNOar`VV7juC%t5q%;5k002ovPDHLkV1h4yIspIx literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/serialMonitor1.png b/src/main/resources/com/ardublock/block/serialMonitor1.png new file mode 100644 index 0000000000000000000000000000000000000000..584311efc36325fdab70d921595049a51d80181a GIT binary patch literal 1434 zcmV;L1!ek)P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11s6#~K~!jg?U>tBQ&$wmf9C`UCOJtAL{db#m?$Eba8YQ*s;wQh zIDKg!>P-94KDQ73U;5CezO+;8IPEx7I<?~HSb|zaD-|P%(Q>n3xF^AI$w?m=qnjAW zNw67a_-693*IxVV@5^3muXT=e_QIto8y8VI(+tvtw9y5yDIn9>6p(3b3dl4z1!Njo z>-C^$G|I@+DSQK?OwEP}&V|X&(xDi0Daf-@URH?Fkh@;n#gMiDHKNjW?=kJSyvzok zCG`8{GB}GJ9DA!8huxa)wlSn7V0<dTkH2={pPXIOHwyF*jPh_`l*Sqt#}B!YWhtHQ zfiwjCGven=YX{-^1x@Rsz>V&Ho=(nky5%4_Iq3yKN=fXW3UH>?laRd4Vq#~Zo$UoS za`oA-^m#Ni#?Kc!Nw=5REI*>EoNe_Go?jH~I$7pGwUb7-i>+p3%&w|Yd_!Yg`STtl zqZ7iK`;Ug{xZOu{-JTTbry!u~t`GlIK(Lt%dOkkY%nnChoWCqfxQZP(iyd6@bmO_* zC(O6s^io$*f+1J0mCEw-wK%KMDD7SM1zVO*=5zw`FGB*}Yp$W8vP`gt=NGwgr(X*V z0h$C1JsBqu3JbQT8W%-tkbfD+o86dJ)B~??L<<c8nnI|5U{n}OlEeYGORx<-8E1HG zQn1xmmZHyIPUf7PEb1%ExZ3HB&HE>2m<h~bQ4E^MgGK?<vms%eZ!=>tiJSHh{L3FV z#W36FEQ$#L*tOFk2mqLx4Xv*LHKH;x69m9!HKCJbf^%Z{Sd3dVZwO#f;@1U3%T@eY zc!A(t7@bas&9Z!(P0j>~L{t=GF1h-g<OECypYiqg7XbM3)05<HRmjqbDYF!bq$FT* zNsY5*>2v`6<$cWWo^I?mGhcji0)X$%UuAM8M9Yyn4pcjZb()gcwBjG1m<|w)YA;0- zE3RPxlPR^+On3rT#lTmewE$o?F2`m;o<;Bpgu)DuO$t}&!Mbu9Dt8Hf$_jE`-;gkt zbu#%@1%UdhGAdj}=ww}N{_~ICA)=}n^zpSK;R(pHgjF$ORgAHwYfo8WoZpojJ;FFw zpN&N^2tQeR(X{!e0^EHd3Mk!fkF^~7>};%x5ykl8s#T0zuqwt^_Dz~X$YwFc6)fN2 z7#+8IlUhH&xX8KRuA@f89H`k-qJ@S4&CQ&<qBPFdcI_^guKi6!jZe<!n3xXo?YS$A zjZX{qZFy#@%6Dp|5rd{WF!;pJMbDi$do&uQy{ng=2SYSeJ8|wPz+~Kl8c`XWn8y2X znC{+zIDxV((Q>3-2r;dYlKndUc=#zlw0c-rSW0=bl{j^@j{Q~6wH;SMQYX;s8{yoA z>nueQhlm!)vc!o)wP}-wBn0$4804q6&bY)A2uTuZlJ&rDGt+XUj?$uS$+KJqs|x7u z8{m9fC#ss5TyuRnjnyu${ndxpH_S|6F3v}mBz6?$<KA0>yS!vw-i4ndVGfLrPxH;0 zwuF^dk|a(v*U(hETd?~lXO};#gu-O$WGspSd!9Mv7nZe<@B|$BR*p99<MQ>MxH(CZ zIQh1l#u``LoZV)|ZZoeh%T=&y2p!&E!O~JhXpdz{;)7!i)b5S12bsW{N&N1cRj3ga z&+R^Rvdo9ao7m?n`aifOg`}?0V+X5QjHoz^9qcZ7<8^b=gro#WlEnLmYhO2)l(6By oPHzgxG&Tif8k+(#jSVm0Kj&?oh9I)m9{>OV07*qoM6N<$g2W!F%m4rY literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/serialMonitor2.png b/src/main/resources/com/ardublock/block/serialMonitor2.png new file mode 100644 index 0000000000000000000000000000000000000000..123f85460a81aa83c45693766c52e1013c50402d GIT binary patch literal 1418 zcmV;51$Fv~P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11qVq)K~!jg?O0t*TV)u2&S`-`M@viVz#%_#jDK1TLSQg{WJ88w zOr42~KSc4uE4fjxj2BB#xlpqhjoB^~A(~~w02yu!Swz?d1C(wHu;R9k|3Yc`A8^j8 z7lg{U)0UnV*O2r{dhxyIeZTj4`n~V>edkcOb^R9XSWp()(-ho;h1%f)0IvW~!z;kk z@CxuWyaGH8@pesQu~;xPJc+)3Jq*TKm=_k|EB1jxCP8?p63-_+3t3>mcBQj|a`!I8 zvK(5j-$GqW7mTI_yM8o9K^+@`lP_f<Doo{0N&;>P7&Dkqb+!>BlSZdwXo|v%*&37` z&jC$SuBNuaWdV1FM)1Yi1}rVFxRf~gKsY`sFTpN9AD7}c;8GKh8fF}l4^ajoZr@() zj|f44zn@JX?cIksU2_SX#l73S;3j5R7FA~&dE~_+5el=^D9+X3DTT~x=Qs=c2K6}i z+jZ#l6GTjxb_k7EdvGj2)kXR)2)NR53!{b^!X^t0z{lk!I1m}i^QUPFDRGfd$3~#G zp&j+D-Nf??&0WY#Pk>b7FO<sq{6d^Ljzis*F2d#`7TG0FB%&z1c`O@;Gm{AW((($L z{`gA>4RT%~&I9+yVVYYcY)22JY)O7I-Y(5Skd!<RI<-SWXb=!oLVx!^AjT9$;b@MA zunpWB<JEdWW+MFkd;tKv{CrT5k%aS?JFU-$$Bmda%|j^<6ha4pKmi8hEHMrXQ6M;o zOxoLjA9c-SnPq6AtpWf*9TPza*qD1;1+XlK@o5u)^=(ls62UybMEC^DgeL@Gljufi zE-XEQd43T-VlnmvukU6P(`GO%3whvfNCL=h*=`R^o99tcS&fRyY8Z@j0M;9JGgcYK zB>}eLe8lVjW$TSQsHm*QXW!RbpPl-)4i%Nv__Jq#7bmER<x&YT9ygd^ap52uoiy?1 z4wBgL+!}UENF|rzyHDQ*0BfCxKdmHuOmmCS=_iO?s5CznM>3NMKZT4W*QwPJW08o) zUX>gGaQI*nGBnW;Z(8kB6|aG1I0V`_E9|ZSO;b=Qq);iO)=O7v;y#|=FHP5oae%)c zl=490N7MhM88ytHy=Rb!N!TA|y>j^b`9h_T605C{?uJSswRvw6R6-%jAl{y@9ejxT z-@ENZkXT+>#g{)cfn_<uo|76cga!e@m$|(31fH#?u^qLI?O<5eZru2k8J~Q84*Jn4 z!X6$PjO^4Hp){-zbPn|28^urcZ9KchV!^L1H__317lql$P{%|-E|q{`IOxZxaHCI$ zwwnVyfiz8_{MCG-#Dv1>_kr8GVSIk39*<VmTu$~l-aC<x!Ys90b2zmEUD|)})sGjk z#@H_rA)sjrWyf>fCJ#6vprdyXr)w_p8t-vJ9OvA55Vj{6<tOrx82ya%EFHk1fVS>_ zd{cYbA-U2QQc;whf`+R-=+x>kZJOu#&@_$Ms8HmlB_KB~ep}v!H(<919*j-l!>U@l zCoM%$C@alDac&A>ADNheVP+QQxkZS@A}HljgoP+veqq@P4x9Kwb0>bjc#UVLC<^bq zoQtAE8XHkh77k13l_Tj`S!0OnF-_BW|MddorSZ=LPhiU?K3RMaEW@F`wHsoQ2p_yv zgbYpeli=nQoZ3d;D9OSq!yqLt63@j){okAf!R=3rp2m*<I_(wUX?O*A8eRdO#*P>8 YFY@lGR^BwIc>n+a07*qoM6N<$f=+RLr2qf` literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/serialMonitor3.png b/src/main/resources/com/ardublock/block/serialMonitor3.png new file mode 100644 index 0000000000000000000000000000000000000000..ad21602b5dfba5315abed9f8605c32982e04b71d GIT binary patch literal 1199 zcmV;g1W@~lP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11T0BJK~!jg?U>ne;zk&Szt+wogD{J6re-p8lNZX1<Q?*uuDHg7 zhq1*D0<Cl|@DK|bjKB$T73Yp#)aTIWUnKGSAAd^TF_cpiI2LCCr^Z>psc{x?YMcd} z8t-0!_I8hw%>4+@TM$MuQIent1zlCJOat34psDKH9ruKz1xP6wj68b7F;SFkT_+x( zT(W4@9V|;f_SiL!5)gzj-|k)fFnV>Z1g4(P%<EEfY}yS6#4)F@aIgSx5%9I+vRp26 z?UO)%IK>YlKK;@_QI1n_P!I=U#NGXN@}{9tELapQ166(b2ygDw>GnCcm(P6zQcCXb zdn8GkybyxRYMGj2W9ZKwD`7hKdF+i?_+e_#WHzTan9!(Q9LAmlZeTE)5o~x~(-b~` zY;x6f(&PaI*d>cEpRQgc+8a!WlYBOOj$8sH5_d33^Amzk*A0r6xpS`oT8%2TN;x&2 zBuo0kX&xFW<Pxx0gv4<=Rn{GwLSZ-g=eTM*Xj=N%$!wm7MhdxNVCwlBBZ8V^r$*+B zfcYZr^;)%rqO3?OiomJZxc%{ZJ_sVBI7Zj<C&gSl!VT}6riQMitLxNT;P%rtt6UV; z0szWID<xp{>^Bx5r6h>r6;WM72$2akT|KOf7<#s)h?A8ylVthShKO}S2*MbNL|4^J zTHYE1QJipd+vVoAOZe0xY}OokU>0A>>^?=Ts0_z5Zf?8Wb=>vb*Ulq1w_V25Y^>x8 zVr|1Nt8|)QL=eWAF;zRP(c9_)L(}-}%Qe8-o0e$+-g-?OC(QjYl|t*z1+{8ARc;F3 z%sN5{%qP3ls%0v65h4D$?#~}vASLPx-RyP~3(z-;Qn^$BhN-c~-k4uMG}pgXRYBcx zu|XIyo}>koissteilU?f9>^q$=g4It)6g;nYv%d%Hj3LeESF2ZeeWYTVxVf5^3X^j zcPmk?WDon{j(KoL8Dh^7MlpZgJ>UoF8etkbl}a%$jWu%R!TG}H!5zLZvuZKM(>YGH zj9s$OR1GO5ei$;D&KXVSS%CtsTMpug7lXY8cyphx_b$uj?tl5g9r569U6R6e)1g$f z_NDM5_7X6iEx7yM+i8(p5YTScGTG`7yeeQk_2_g5JIM?7uLhQ(({3IA&;P_u0i%gW z=SP1hyL#<{%c@O(IAJ_p5XIRdB@h$}22Q1nb5VMecj2GdD!>mSI^DsJt%7!=%4KcU zjb1e!u9^-(5D~^PahxEY`WeH}(YCx=9*eC4EK{dhzu>VqeqmP7ZdSS6Xr%#6Q^z#l z?z72j*lD5WWd$i^sy!A6uCE-N%JBjC7I-y?TlFePa0e5F5PWFYsn~`8g4<r$D~+}q z6_!#`E?L;6{||ZCyO0UmP3PZbav<LQ*Xgr>Q{yb))Hn+`HQv2|zX3h%ji26kiy8m` N002ovPDHLkV1k!<EU^Fp literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/serialPlotter1.png b/src/main/resources/com/ardublock/block/serialPlotter1.png new file mode 100644 index 0000000000000000000000000000000000000000..87ede5be94dd5666f95121a1d59e1d5546d50134 GIT binary patch literal 670 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmSQK*5Dp-y;YjHK@;M7UB8wRq z6xV?;<H}7h7Xbw&OI#yLg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kz!zAlJ<0Q z49RGGJJUN`I8dT(zVYOpDa$5DXSzs<JBoDa#cHxn7jrz)x+9=Kaow(K_DVn4SuW0% z&g?F|yhu+a)Jv;F!tsu1@@$itK6;NAIc1)h(QUfC@w3kTe7?`NbNY97rF*Y;Qkxzy z`R+k`CAC-vRRw8Ph1n4y3!}0F?yY24kSVoU-6%ObOG1g&ZhGB^q_4INeYu}L{QJ7m z)Rafq-pR|s3=K{6UmUpQmh36(P=;lf<z@+lWZRY6AK1hrlqb`0YF__+ixY<oQg-k8 zUop>XhlJtWUGf2If4<n|r}mQR%bC8Agx}Bg`sc4>`0(JKY0UAouV>X-*9sLcPv2Sk zRfu8z{oEjpX%^*b$IrHQZ?RVFpQpoE@cmfor=2>|^Y?As^R02_mgA4+vND)$^U_&g zpQ1K7;p4Zd`~Ld;;pkk!AKm)s`aFG;xn=ElqhuSFJXgAL|C`(9&dehPIou7i<ONDn z_iI%%_*fPu?Q&aubICjQ7qi;Fr+?uyl0ComHy4ks)2ww9Kk=PUyJOaQ``N-X8-3@j zTT?wZRU)G8qWSM^duI7cpFpNfa3uM{Po_=reEhz@_xHLK8O=`mcPQrktpp~AkEg#c zev_%u6xRK-<CcT6O5ex&Gbdy{)R$Y-e-mMF;;?#qQP)SgZC&@o>*>pbCvNp<tkLtf mn=bov$>XF)>k%QopOL#_+WMrO%dLTFiNVv=&t;ucLK6U9HXCFB literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/serialPlotter2.png b/src/main/resources/com/ardublock/block/serialPlotter2.png new file mode 100644 index 0000000000000000000000000000000000000000..a151c3e9f1e67f3c0dc86498928d7af483c814c0 GIT binary patch literal 653 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmSQK*5Dp-y;YjHK@;M7UB8wRq z6xV?;<H}7h7Xbw&OI#yLg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kz!zA;_`HH z49RGGJ9BT|<p7B`d3o!yI@w8PA_5$2M_3IEHWV}8VV%AH(A|heM%PaaJRAona5_o` za0j*XF)mS3RBY6!SM+^!V~OXP0Kt`kcaE`EZ77-d(bn$M_ZKzW`g7O*{O0SDbx}!i zcZ<F9r64^9F9$Oqa=UY&Z2S3Z+sznu3CyvtesrSC%W2Jls?W0K?`+u?OgSGEzppIC zRaNn;?h=-i#i&Slw{&lEy2Yc<-|yyrTN%Zw$nw^2ew@IB^HCwET^Z_1YW^t9NeLAB z_|coY;qg?XWtkUVw{O{PCwVv_b0Lp`@$LR2+8+{Ew?3}2Sm%D7pK-_KioVBHclPZ! zvV519EPDLw3i}GS0|h4Y&fKo~&)G0_`uf5c{_oEYpWL%tKknfUxzpR_&W8HGiuUOK zz2R%hTFcL^X(m#aZ@pvO5TL1O(i>;5!oeO9#<qI`^Mc#_oXa<@U(3gE{0)<&v-%Iq z1<%`Gv@OVbzwO@pGX^DEWe*)1k6dq9$DI{g?H_g~UGv%I>P<m*-kDmn=S|=2Q#7qI zVVnHQd_`3SX&9QlbKa3ak;1+Aeq7&rr088q@9J>9vof>&86xi9_%qv7Rq2l8k-oFn zoi6_Wt!!MzI!)|!%)San21S;~4}V-x-*|?nt?<X`w`Wcsy|MAe+ma}czp);iC)~j3 anRxMz1-)+?x~zdohr!d;&t;ucLK6Tlco{4J literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/serialPlotter3.png b/src/main/resources/com/ardublock/block/serialPlotter3.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f6c381126ae2cfdb3823a93f3469fe68465c01 GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmSQK*5Dp-y;YjHK@;M7UB8wRq z6xV?;<H}7h7Xbw&OI#yLg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kz!zAJn8A; z7?RQWc4mI|tpJhs`NjGFBv)?~U7CH}(f#zc_m}lIz2DFuDUqDBIb>SvHKW(Qo5Z_v zk9I8jtoO!Fzuvrkj{5frF�re?o$ir@Up`c9iqRG0q#yzA?pJZ8Bu-pUlai<fP2? z?b;Q!5UxADazD&|a5jW>@lRj>9Vm3Au4PU`E*jGEUmQ9m^<+g70|zs|qrtKRB9>8_ zHU7*AK7E>9>5(VjACH{-UQy{u<w2G6fl4g@woFaE>Bo93`S922@(g?STO7SSYj&d7 ztlkWHlZxV7%n#CLOicT(vX(7f-S(8wI(z@u=g$8!dE8+lZMegilX?E>&*2P9ZrV2A zj(2H1e^e*>=znvk#1|jmz2#(x@<0A`N4dxT*$S^-R?2+0{<8aRrJB-bt9-LG_ql4G zs~MF(?^=A0(No)PUaGaIfZ(6jn^&S1em#Bmir2!cr*k&?X|_h~NQ>Oob*q1Z@P=L( zI(sYr(fa%C^_%;rx-9fxKU*g@I$B|O^^Hj9*^{OV?(N$8)osO}^7@ppcMcD#Ro?#4 zym81;^JrE2>8CB)|9nHZfR0a-$t}G7H{kbnxVdNLABiQ!XI^|^1&nzHPgg&ebxsLQ E0LIJ(;s5{u literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/sim1.png b/src/main/resources/com/ardublock/block/sim1.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac8c5a3c6c245ee2cf0c54f4f36425215769e63 GIT binary patch literal 1159 zcmV;21bF+2P)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11O!P$K~z|U<(S=1TV))_Kj)m5mX^{|T4;IMco7@}w!x5vO|mW1 zgk&?u#AwuHcSaL0y!P)f@x}`^CL}I|M7QW<sM7(CxOHnr1%%Z>fo?4?Eq#BX#|vhY zri5^yK#ZTu-|zW7&-a`2JiqgtBYbo7j?DiE@vsFPGzVgMH5lgJ#0(y<{~(sz7S(Qw zRstbL?oZ(McnOB02%<oVR!f<wgoYYBtxZR<nvL1<OTJ~U|9qF8Q!UimtpyXm8x$LM zd%W~tzfCHgrl?4T-D*aymRMU4Gr#0#ZqY|PnWV3`Yd`ev8AXQE=?w;lMoFd9bhS0{ z>bcWsHR^0W5{>a->TlGNlvCHzSj#6Lyp1Fse#=l~c;4$L6p3Nb>$rUJ45A?9<n_8@ zUhX`eS0{-Ql19plZ$%~}Ba=ZAw;rENZtkqzqNp+&ivwUX==02O$K!b~!($I<Yd*@k z&em*v+&RU=NjK-aPoURn7#g|Hf_E8!>PicjFLq<Mnn`bDxION~;hH59i=!!0)793@ zD`z_p#hvQ_g<aZYGyw2yb&X&svg5i~BEgbxg-|$_6Awk=EcsTLd9uJ41Gk99lDybZ zOL<u-o~M4k9K1y^9HsxpFWhxbQDHIBR98(VBQxr7@za<?iF`oe6Si5(FdFm(LlHjf zzrpF&CK_vPRNJgMXIUxtCT6(Q(?M@nD}o@9k!1#M{)TI2p05Un5CxHs-g}L*(h>lc zo~`itwI3LFPIJEdq@pdZ$goNhdH2c%27VmDzZzuJ;bPR`LO`I(R!&Pp4V|q`=!><A z4A<DKS+fA5Akfos9M{Y|D}fMKU%!+!3s6;APJOM7$MatNYXPb&EjwOIaoe<6&3yRI z72fRYrLDP+5}g(qnZ>8e439nJ)33i{Zpo);&KHi@vu6Lr{QUTcl1P26J+G$Rw3%NI zM-{ELt9GZ7MB1C{Xm73qU^N(G%DupyKOPZ{C%E?guY7#<jU8{b(h^->tf*-7h!~2s zTQ(-OdNZF$rW9!}$cxczG;p?~h4<g;LoG>!qjCP4Ti9{EuuZ2Ggu=eN3p$(GREqui zc?zuWyo(<s1;6?vl1TtGd$=6zCyESvynY;i&XV59Y?+^SFW_4a0C1$La_{Q)0Y#4? z5{>ii@b3(bIB2e~rn<s{u2@4j8e?wJ$F$pnjLfN)Mk>oq`=xnLC^B4OF>&Hp1G7&S zaZb8%PP%jQT1^pWP9EdJOYH>}SxAK4{Nl;TGRvz$0-*@uXbhDoQf4$@x0+F@@-O|V zRGLsUj#i^ar`2TRv3P=5B86V3L8H#SsmZd;+Ij>@6fhd}d2?=8yB)hS{9oqqKTr>t Ze*j82VBXOFhdlrQ002ovPDHLkV1mpoB#Qt5 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/sim2.png b/src/main/resources/com/ardublock/block/sim2.png new file mode 100644 index 0000000000000000000000000000000000000000..47bf280ef4f406058a144099ca00c0568470cd1c GIT binary patch literal 1194 zcmV;b1XcTqP)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11Sd&EK~z|U<(OGaTxA%BpE<L@3=CTb7?!dYNGV#2SQ|pI*w&IZ zR2#($qiJKxRTHBzCUT*1iKcNQF`{X>uvW2YHP$XE7YMW%DFF;E5RknE%9OIqKEn)f z#tUR34ka9z(wIJ%|MxHN`!C;oXJj3{w>&&V2oGAodb2Ku$0kiwH?-0{II<qgEsJ6` zgAC(S{91F3_U=K(jTQt!Mrd#ldR;hK=}F{n+f014&fC9lXp|FYE_2|i?PMg!`%V06 zkZicEXOQC+KjC)I5E!5$IbKhoO3B!iiLQZRI{SxkI9(h$wC8^4T{AK%Ny|Mm%drp2 zF<NZw&E3W;2X~`U2YBOVtDP&&?I;xr_UGq#+h^zIaJgnsD&(kCO8+{Lh@=zl9vs1F zu@MoXrKGqJL0FsuLbX9W`}7XqMdWf68u^OW5JeHu<3S-`y8pDxO<;gZitNQ&q;$60 z902GdLVV0FM_czGKU}OMFFTWi|JsnM`WEV%+IV4K9%0%bPM!aao|~fpY)XjXXmKGa z@p@)v=QvwcPfg<uEH*ouKoxs(vw69wK#~rSn583iVE_yn#+fi$Ry@w?a56A#VA5n= z)NZuc7#KFt+S$juUw)6(=H!X2G-4wo=(%~D_sc7pG+8)aahA*VEhNT8lAW2#tmxrF zZ6lQz>!ipBB%W|mY&5#?5GITk-u$G3-8&v*Yeq6@iE)eGvQ(-YT6yWfE)MO@MJAIW ziXvs-o#Wc|zj*JfN(7mVveFWwBIY-|f5<>-*-5H?Z=twwr=%+`>4cREId7M|NW5N$ z-7(FD+D1P7<}^o2Kd1DIll)Ts2Ns)Mnp+?}Db8yaKoA6q3g)lAVSI{LpMS<{79cet zhOD$i+%vO`+?kNHmgK@CDK45%-#W_cho2)iJCjhY2GQf8_ttHGymW=vJ~}~H|FEPv zw`Qbx%`Tw-=lRIx0*|C8`HYE)i~wNLZ1ssP$Epesr9w_#_7?K8w*YWw!bo#_59g{I zu-F}Z_U+G<zjJKGS8YR>)~78nVE&1OX@i$cObc^6r(Ke?`=zwh>%u82c#@CbIE+fE zz-)E!XJ_BaMJ$tP1wnSt*lO@=Ev=7?Aa!Fb0OM0;e@^W;{QmLaaLr#ab-;tIsP2U% z!`*`;)HdE=W_E7LcuPkw!=rZr*qoBEc6IjwNlD9Wwe$7qOPo4i!{b?-NZlAqNU$2S z)lO&M5X~LEh#n8Swm(WjY}EbIye1?WPKb>nKPQXpT?1TgYUgTG`=Yo;9mxLt9E$ht z^s7jJBI#>s0Z|kg8JlFnXvSo*qfp3+-VjD|ydIU(cMn}|HzunCjXD6WM(u64Ih@#? zE<%DesQ>d5=J9yAJ7q>L2<XB?eCAwk>~gHi@c)^I?mw-+0X&6m=7RJsWdHyG07*qo IM6N<$f@c#f4FCWD literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/sim3.png b/src/main/resources/com/ardublock/block/sim3.png new file mode 100644 index 0000000000000000000000000000000000000000..be11bf21bc5a098da9d4be752b88a02b51fcf679 GIT binary patch literal 1001 zcmV<F0~Y*=P)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H117=A?K~z|U<(TPm+cp%1KM-8CP^-7bO`1tN)A#9<<SFu!?Zk0y z%aT=5D@l<6(I1MPsFGFDQSEkmege3}Il#TZ0mU!xKN$W;uwI(LbK_YAXSpJp%!rfp zIi}kQ`zb+LmUA~6vxrmjTp@(OmKKiVP^$)n^$MQrK8#P&l$+ZjomPWN;2(_qQ&3v) zB2M^p)yEivWeEb`LkK~pa^hr3oTO-7aC+SSC-{CdN(n9s!&UDNV+^fEos*+BQhuol ztu@hPj%A6pxUg2`=N~H@?Jt2+f|E2wDUEI0oSk+MtP7A*(rq_3;)D=Lxu;kI27?gW z#}|e9riCjdSgQg6*OnV%cVV$e=no^puu8Y}WkE*Kl<{;<x6{P7CH=u4BuNH9;Jcii zcJVzIV+@1gnDJzW(i&+AT8)sCqc$aI03}ap+g+_snq}ll?H#8IO_DBAxn66}^{Rb7 zkGZ()p>;vM7T~%Lak}K<_a3=YTweDXji-3NL%mv|FffcJ^oOG|^j8|n3=TXO$F|9p z;<t-yT49}PH6ZZ4wOTHVXfort+v2Fx00aiZ)y;tEEau|!79rr>53g{Y72PCV^6^uT zQ8eYK(<+tXr34Ehczu4tRd2v@nKO(g45JAG@O_W4R-xIfV@p})vjl<vAQnI%=(L+m zXE9lx^XB~YK`cPvdsM1Ei$%gR%LsgL@3~5Ei|@I-d-IC(?~Vz>Dz+^#tX920jQI8A zHH)~M!KhUN{#uOp0)-Ht``6*Q4gk5*8-2U*B;z53pi!^Vs8@lN5t+>shNCe`Yp!|& zetP@;-l^u;n;BtQtG%$L+<GwGpW;PPl;VC6Yw5ZUop#9E*JoHlpp<5|SnM7D*cG(u zJOIJ3a8NJpx(@#5ddl;1srFnr_~YR|#r_ShY8y%kj+2yVGQ*hdPw3e^X1QD$hnIdN zJce>kOBdYS4(Z=T)NA+muS6+D9H-3Y2?l6}HGI$g+wZ*uN(uH{hh|t~zDO8P=8Pxv zwSLR8=(ZXhb(#kyc}R$-{NgbfvZW$dIZ72ER`;gwd0T6@C<>G=kkUe0>#r+a7;I@h zTti>alI0p9z_B;?Wq0i3c-lRT!1EkD&)I9dWm&jeNJ%Mq+?0tmcU3NS2bc08|84vU Xt|nBOdrpy)00000NkvXXu0mjft&i8` literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/sim4.png b/src/main/resources/com/ardublock/block/sim4.png new file mode 100644 index 0000000000000000000000000000000000000000..5d8ad35c5eb759a3c9aa50e0dd320792b32fa103 GIT binary patch literal 1202 zcmV;j1Wo&iP)<h;3K|Lk000e1NJLTq002Ay000&U1^@s6oXh_r00004b3#c}2nYxW zd<bNS00009a7bBm001Gb001Gb0jaX-q5uE@8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11TRTMK~z|U<(PX+m1P{qKj$Eq0~`*VbGXPQARu8tAYqZp3UP>T zEMZD+Y39PlY|#jpu9izFo6b>N=wva<T!E2N3>w48p*AcjB_SY0?iac3a6NEt^oMoY z3C7L~2U_#<=kvV3=lOo$_kDiP?|DRl+g_RFAwv9L3s`AZ#ITQtl3j_hM1=&b#B>X? zYB53nUheGQv4!=K!FahT(CPFHkB-yXH%Lug6W?9?h1RY<<MZJ`eq_J4n{(e*@oQtN z#l$ZL!G_mIhH&=C0VK9IOsQw6zuSR&T7$Q{lIYMt)`bNjb&zoUlj7yjyJQ3zwzaY5 zRMtKuwl)-1T;pWHMaC!9#(t%<6Wils&}g(KahGdu6a9Q98m-PUs+WKu!%-mtxXNV= zjHr0`^q1%j29y3F)fo8~E9b;%bvi~T%rk3cB}Oa~qt(s-yuHMhDfNsH*(L}wESEU~ z&@(VH$LvCESR2B@my#*3t|kA{KQClYQXDCppXPL7Im4=P4!yjC$Y6f}e*2@Hqh|_f zXzj$tdKDQjB(XDL19F*^iK%IdDz0+svl8@r^L2p0EZx;V1i%_!FFal4X2;1K9S95b z#Y5?A((Wdg5f<pnGwZ_n;zSlMP7YMvsH45-K5K&?<=pX1Jd`fv9eI@(lj3M<>!G@~ z9xE#`X(<UD+?y;!J|OT5H??)sJ2--;tDMr@cPOsB&X2bmscUXCS<6D%l^9FT=ihMl zs|sdkXR#8C`RLGo5;sP1{)0C#7z}JXaE$Kz4_<h9kT1nKhuNJJ$H#?bf_`y9Us$8n zk$&t9cRTx#Iogw!lEA0guTy*BL%z;AOnT~8<T9x+x4`YDdq%SWdV_(2lFI=2dAgCE zcfn{D;7&^iH|m<Pv#}=7XSJZY1Q#BS_qup4<2^D@=2L#PmSNR6Vv&f5HU4Dn-A-lR zQKCZw1&w+A*6&8Mf78)72!Kwfr>3rHPE1Gd0016J7eR9^s_@Wgb(B@#q^$ZT0FSJ8 zWphjf>8V?BadIU0t#me}y>0fd)<2}0(>A4^1|DSo`4ZFQU;T~}J3-nlQd)NQ4N_3@ zJv*~bFs;#|aF+6Hbhz2^h6OUdklnx>ELux<^bSzp(hh*PyTXz~TMUaI9vtl@08B2S zI9N^u8IB4GAa%<|Y^>*B`kS75oX7mU0H|$fS-QGqKv2?BI7@jyV-IicOW}u~?@-^; z&dAsV3TG#t3=1MYCIYcY#HFeln%jGpOY@QtWVpG#htexQ5&J|a$?-8H$H$oTk4;W- zzVr&YMdcP1X-Pzjx#F=BiwW@Yz|&2EtBVseS{>c}Lo~E@GV`yK5`e_c7NxV4@kuqR z@kwL5OzMD>gM^XM3F9_n6ebek?XEztH_$scGH1+%Vi#gjhX2nzbaz^R0$mz~60?2e Q%>V!Z07*qoM6N<$f?CWr=Kufz literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/upload1.png b/src/main/resources/com/ardublock/block/upload1.png new file mode 100644 index 0000000000000000000000000000000000000000..92b790ec54cb1f1df3f312a401ce7b1409d6d540 GIT binary patch literal 1142 zcmV-+1d02JP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11M^8lK~!jg?U-9n8&?#CKO1uoDZwE)F&7hu#ts2owF<qEDpXBX zRmnqMtNy0`g{nyvDNiL$RaI(Upvg-s*${+HoCpus00Dwyd>PN!?t{%>%nY6}mZnHv zlBF}V_t|GHIQ#5<#`5UTr#VhBtY#B9DQW`DMooa(s0lC|H34Sh)C;hgweb4eT^{}M zTzPi)I=D0bvEewn{sS}f0xKIkhJzmme=x#MG_L#tA%T>bHXKKnfRrfnU}BQh^=-oo zs3DWhGW&Ar&^uYqFdJUdn4t~bIgk=1?mwPlr3xZKuUAQ=L;##!9m;$EoM1SXp(IX; z689%2Sw5i%e<-4izy5p($N6>u);4!o-`X`4%kU{Are%KqbrNCqt<k9fME4RzmNo!5 z+uDq)`vN0gmtqeD1w-*FIz}Z)=9l08u1LgmP#~Mj-=TchTv#m@hOhQvt;<t+F)tuz zvby6{TnF|=L{>I+&&lO-Oos&JdD!Cu;7m&+S9-btNTkxd65i;JX#<GGlg!L7YC0{i zsqcA7l6m<1Gk&;xlRjr>*~J#uw%Cd80pN7l={(n_*haiA!Uf{~U<9w*sb4@emf)}F zFLX^PMLI3>;PDjS-yP#};jgF#e{ew=f8^~uWb^c2qN%Zgl$hrA;u~V|ByFwDW!JAt zD<R1l9zJ=-!t#cukC>JTzFGmG&T3_Fpy!a?W~<|R;axVHJ9bADqiVg-zKD14<Er-A z@Dh@o0pP>_i?lQ~9`W&Ab17s0T!dV%{0Eb&HgjX2csO^qRn-;<9-RF?Z@;QfkHgOS zLSAg|#&i|UstFkXbdXy&232ia?_#VLda0JC1_oRX%{cof6M$bwO|Su2Emj)q>k%c% z0ObQ5M;;(Bx1ekXcdvtJEUD?+d(p0p=fcZ;_oa{edhMp!qUXz8AQ)ld>Aw|`&t`M{ z_|p?&@l?5GRB`Y24SYqFx)dkcLgmN<gcsK;CJ%>mM-3HUX!MZJ6A+ZK*X^X+Vb^vp z!qh(@L`ljQzug!e?QN=l6$uz0)kl6WAu83?VzKben2(MR)K95WY;HxFdAX>xA76bo zr0QpQ3yqHsa%;3adB`_r*+OI1?Xc@64>068sMLX?2Cx){1Q;O?FkMtlM?AeomcrfB zMQckF0Po{T%_^^3fKl?R>)UJ;E+<y21+TlO%#0FZRtwh$x|L_GWY#6XbJ=N#JRB}U zS9%?sX*t?Dl*7o?gKboN4K0SQByMhMFub^<vz^;t3<J>LeZla2fJ<E+e0$SJCY#Tr zWGa26htgHZ{?9n|U*>88%tlRs*{BIH8#MuDqb9&?oO%KO0ZglXzC#h|nE(I)07*qo IM6N<$f^bs{rT_o{ literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/upload2.png b/src/main/resources/com/ardublock/block/upload2.png new file mode 100644 index 0000000000000000000000000000000000000000..e1bc63bfa10bec015952f42ad2837320d8a300e3 GIT binary patch literal 1176 zcmV;J1ZVq+P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11Qkg{K~!jg?U?OPTU8v#KYbW%9Sp_5fRVKe1v>V?R33(eheVS( zXH-l?lNn=7bZ`6z^o=o_x);86x{&zF_-<tAD@`aHI!9sP!)Pm1V8B4eLwPDK_x8yb zY?o46dT-a{O44uA<lK9H=Xbu}-rxD1-#MB=mov;RhE{C?kBhVbwUHK}HqrvrMp}T{ z*!2SRYE3+Le~vG|{ZV?Zv>5rI^?Aj9WPO3|J}0h;8O6?bg4H(2gN0@3cca(AnpaTl zN0tDOPvGK}c3k7B5fKOmxz#_k<(=pc@aw?eihapm174rN#jo2LzW1-<NutsF=Ljon zJ^;+d0_lBck6p1ZMT^+$6S$ND5uLU{seS(CdQ3%m0E|vP;NJ9{B43KLkau0=)32`K z_~*XTp#Ur_t#WsG5`f&CERLCrX{xD^`nwc<g{0D`Ao}_2>UHc%i0HC82!%obG}l(3 z)oN+1vY^v#Q0eY-;tvF6`%8Ks5JW$pU%k$tYf|=@a5&73UWfGDRDBeHoNNP?<wgKj zz3U7(#$@}{1GrZ_boa&207IkGG2aWKpUZ6>e0-sWijqSKCv%KUF*CmeK&i2SL;1N< zUsKIdiMX}LPVGsvd;#<BRlfV-7g+<Mu`c+z^i4Y-z5gmF$`0>nYmHdE%@J`AP<_0F z{f11|yaK;F$8fKB$UTsiaQ>8(5~3L3i?$B_8lH%2<6RfI{f7$xy-r8n(`8%wGxq4I zKUEGuC=}i?A|jEpT1XTFTyE=N*1a6F|JJ||q8I?+*<(jIuz%k+o95chuVU>PBpgnB zVUp5fuH}Vl@^f=y_I24d(_>Rq_&h?HsgR=lCjpqAU6i%oq)fn@FV*qJnbR@*re_zW zG9=rumuD(Was4zt%uE1QTjD)I51`X(*_WAtPY{)Gmar3ffX>^S;ZSKYvasZdYil`D zB(;AV80Nj#o5{@B6W3lN=Vs1ovvcM9pOYdV3Wd4wNgInRYl)_bi4V`8*_N>)@mL|0 zh&({QV>D^<kT{HzKG4V^4_g;+?MXAGrb1c%ul;1hCx|#lrkI&qq9E^yn084CXgw>B z{PL=oe*4Dms?lh8=e0%-J{3DlMPp)mp6)wNsr-2B+;cJQ6o*jj**aQZOiUi&W}lN_ zaHDW5GZo4v571C$k=j<9T`B;hp-6xd@&GsQIHh)D1R*)7EH{#qZ2-W%?1{U}%NC%N zylZ@h@u`i&iB_xObY-dRv5&^oN0b}!7PBk?H780Gk%z4ZlT#Lx^lvIbL)GS{7I_Sf zgserJW!S5Da#L|0Z@<z2z;Sc2;_(3H!v}e{rHR19b>vxF-&RA(+Q|OT*!4GaX#r{@ qEkJFg1*na*0JV`8pf+~Bfd2qDR(<+cV?|E@0000<MNUMnLSTZ<-7{qX literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/upload3.png b/src/main/resources/com/ardublock/block/upload3.png new file mode 100644 index 0000000000000000000000000000000000000000..2e79b00b35ccc18b68146e0ef16aa003cf634ba6 GIT binary patch literal 998 zcmV<C0~!2@P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H117k@<K~!jg?U>tcn@AkSe_(85z(AVDZC8<YZ}w)NXJ2IBVc)Y! zo35&OD;sRU<}kAtcri}EfRhSE;*%^H=Jb6t|I?uS`Pbi)Hw?9J0x!iNpl=KU`o<uj zZwvzZ#+w(Q^|kPBm+<AEW$|p8I=_5)*Lj{+C$RPd!d={X@^e`ETjC@werrD<%S7jS zS_#O6<o@B2=#@lBDe?T^<ed-_Zxhsvs7Grb$TGp*!y{3&@4U!U_?w9Iu-h|zQoLVz zKT!Z2MTEPTiCFpD;{S&m7kxSgAlk+3_DQF?I!B>QNbbHa3Bq01p#UUlMiAs1FxEzx z#uV4KiuRSats7d2i^8Z7g8Og(5?o+TYj2ArzeBl>iGqS_n<$EMXb+IG{T=J#JRpSN z{-NthNY*9ib!`&>O;fQ99e_*-HbMJ2HOP<kX;dg9tl8=OB$oVkyTF)D8y5?rn0=fA zx${mZ<D$)V3^qXo<Yr`Bv-SegB<1^Z-D<#72qF3W^^sq1Z;D;4L)pHs9P^}YZW@e6 zE3!<m2_lj-W2}uD*MF5#LQ2_aPMMH+eh7e~DA@B;0jjFt%#Fi@oVAFPahFkk4k;yf z4@=@Ct!(!;N9UZII@;*@(r)Qg@|@7@%&%I^-CWyD#?|FjIZ3&WRoTbTr%WgL_<fuZ zM$MW3)dVcwJ1nl9%C>!+5*^5lRF%0|?<>wpPG~lxT&|*^swzTsFQ(u;dB|h`|K?zs zI!T(<_BCh6(!$$>d|J4uYW+TIkcYHCe!s2lwDJPJegAP0c_ge#4(V+|yiHi&zXTx! z{x&M|MHOCTLXG4BKZr=r?06HJ%;@3^O&jt#fn)5qty!yt2k`jAM+iX>?up}sNh#@- zagl(w<kM8JEy@CgkBh6?DD@P(eR3!}^73Qx-mUD{*@W7X2Uz>tBK8}zNo(=|j(wUF zWKB-!B%lj<fVF>gR@XMVEXCZ=(MEYGk)&B|mTxVfEBX9#a!5o9*j9Zcse}T~{8-S{ zIddxkwl(WSK40+YymMoQrgaZ^<&0gvhL+LFC`T1_OB3|zgpW75<CzUrY8__!m`{tV z!jG~ndsajJwC_Ui-0FI#8x*du=4X4n`7d*WfW9#Z=o^E8zA*^s8-swp@#Y2m2jahV U5iF>dY5)KL07*qoM6N<$f``fBrT_o{ literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/uploadSim1.png b/src/main/resources/com/ardublock/block/uploadSim1.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa8ae0af0d6659daf89293b725392250ebb1630 GIT binary patch literal 1255 zcmV<D1Q`2?P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11Y}7>K~!jg?U~zCTU8Xse+db>0HFjD0tw|-29Q=qq@oUGz^6J6 zGCt^o(vA<l`s%a)hc8+kZ!b`%jykQQRO+RzNNJ(KfPs)eNFWWDGzsS<#|La6l8|%4 zCDWOFPuY8~z1H`gtiATiiR$YgZb&@EQ0JP!VUZV*Yvcvw8hHV^MqWU!p~*#1QH-$~ z+$0hePyt4xo)V)Dy{=HPuM-m>0pkxBxI6I=?v*v-vG_h4omR_fdj<6l3yn24Y?f0Q z{i@{jLieWTDK9hOs5ECqKJ+-km)CBw=v|Y&r^u-1!}s6FXea9%h(tv`8ye<ve>Zkp zxoi>uLM+B7gTLTg+epmS*)7yNtdyFJ7<D?L+X8|0E!-;soNgbY7?bT^b_zwJ0#~ly z<Whe(4h159ADu~%FD%sX_QjWJs;f$C9~A^9XWdN9EXwk)s0u}*0#}BH6{W)X)O_Oe ztDR>LBo901;Q7{i2Ku{Y`Bz*<quU~%4h}Q#@n^IZV{ul4TZwUVgI#I3jL7O95CoCW zzx_3%h)7gGl6Gr^N|jBtgOT+`_C$o!?MrK8&}&hvcUikUtJ#K23k|?#D9pX7g|tSC zOQ~~S5JbMXHo`#P1#0b<ed`5kHFm2xab|uT8N*a;puWa>6x@OT?g6)VjgP<iDQhQM zO#$!pb<t2$xo_>^oQJQzyOlIoZ8g()+De_nilfq;)eZav1#b;p{%B(>%;<zOYbWuz z#N@0Shpn8l(&D5wi`hgx9%o@`H+?okVO&eAj882v^4Apir(G=jgGfl2ON&t}I4nmZ zV6TXC&9xZ*_e2|NDsfbr@dY;6dK}reHyqi<>ksl^W|7eeCq{!#RvQ6F+zWMev`}U$ zO1ailS4C4@6<&Xk>G@?`9zPymfN*3x$!;?gX7KuLJSzcS?`h8%^T-7BzSKs~i)|V0 zY?f0yPxpK)0D<)_=3HJTX5Ba!cPrZM@mZ=YWwf`|ALvgFpjN5TX|=~rJ{8QR#hgEP zhWFm=;oZJ2^txRh!*?c=?vYfG)s6l=>161}os?^bA)gAPlTNPgiS@yy*Qh8fNo#+o zUt~v39^g!kEor>I5jxO5YXQeW9-z2Lk4ixq%}PLT=kbsS@CDYB^4?TpJkVaTfZonF zdOGEimw@kYj<FfqU;ES9|NQ4fVr(ih9GL&0u#74p4<Jbre~is=_rV;`G}?K#xt2PI z6|JUVpRI3go$J5dXU4gdn0uwYIb%A>7NC^;UWj6h@o5+1(=OC%71r`nOhpE?8V!Od zvifL)z<TmwZE2{c^SP#szGVq$X|Q9^D{r_|zzb&^n40qt3P*vRmc#20;`Ikp?$K%r z=;~<ULPu*-E1ovSN&G_-mn4=~0yvje@%kRI7Th8djS}4!(G_YaGU&0GO`NW-ptaGF zbeUzsiM$t5t5n!+<%-{E$nt&U9#0r~0l7wAK(3J&kZa@x<QjPaxyDm3;9pIln;zrJ R3v&Pf002ovPDHLkV1fX|NuK}! literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/uploadSim2.png b/src/main/resources/com/ardublock/block/uploadSim2.png new file mode 100644 index 0000000000000000000000000000000000000000..f46b182b4862a1d453e3c9c93bbc62b8dc02cf38 GIT binary patch literal 1235 zcmV;^1T6cBP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11W-vtK~!jg?U-py+hrWbKP^z8Pz!b3P_A;w8F3)<iV~7JqLP}4 z#uw@f=cX@xC7Z@9n?~acjd3hQ7h|GmmW^yqqMPSnZZHJH(ZQe~$2c~w4ZG3<T3?{W zh93WxvWBGJSACx6_xyg}Px@S~sCTf>$`+Q`-v&0S0D!+00Pwd00RC10z~2h?M^Te` znaP<2^m-$RM95{~L`6mrAr197*Bt|}Sgo|Q_w&=G9tK9ISXr^GiwO^vaE~gH0#yoy z*{P%_$GFWa67m*mZto)@E}AT5yjSLL{jKNy&%R|~WJ>THxlGEj!+YJv3Hk<fOGXaW zHS*T0Pm`7E8HCBa%)uik7@L~2_2sFODacA8Mj=Bc4M%S<GCg|>?dUYUgX5UY%YyR@ zUPAgMBZrPQ^5#A@*=Y%a3w-x$r_Fp=Xb7*r_yi^SX-?ypj3!#U2D#WdASk~_r;vWh z$l;@n9xa9Q?R~b-&s9C((mbs0gU8D9Ij~PHD8I+YsNP`W;E|JD(Oz>KYhGSqa%RES zE-lRTw47Ucbq^R#X5Ohkg~knpe#wZ{x^_m0MBY?$Ew3*!qsh#>^{40^9CsQMAq_<= zUUS{2o%FVxQw0OeFY0J+?{^w>b=YxXqsh#BpPpv_UNw1{N$Zmb1));L+xE;Cr<+m8 zBPq;D@r8Hb-+N$SWQzSCe&cl#i6ofXJ=GLuE7y&+b!++H*crRNjFdQvbCl#~C6lF0 z@ahKsPd)*FRfsqCR8!;tqM_+`8qZyJIyW&kn%wk6wijejlAlg+P>|rdJ_CSNh>vPt zAXXt?H`b{cp`qylBNH<&b13eL<oPEb<k7M`K{b8)7E)K1Iy4VZlAlINei|baGyI_$ zrhjM>?btLry}>SSeo@CKU!6reHqFbsE8N!f8NjnuJ9uVix!bt3q!`kY)*flovp4DL zAEmW>ke;h+C)y7!U1TK3Qc+&uGM^YANGv8iRN}37!R8$)ep?hfA1dbU*LG9;N;T5( zwGDmZY@6LZ;z)vCqrbFisB1XqaBL&y9oA~qQ1|s(t&b19L}F~T)A$YjBJ;I*fa07~ zyY|fdqRV)%0XD-tK(sspkq2)MuK;RxZH{?>vFTa6b$@r1%w@dC05!XIQ1iGj^A@X> z&l`VZVez)$_~YMSvb7cRNRr~5uYd6H81=+F09Gqa=l|r#i#^<5q~hW2xfG~UkVw{- z9iN)x%QF|~&<xx9o~pRd?Q#+f;IaAt$z)!prK6vgj()^q5z2&ZDCCiZNkTA~%uHOL z=la|&yE$crnN&S;uiM;$j!~W7K%_LxW8+q<mHOj9bGdtnMV(&I9El_tb!92)%2GjZ zB0&HfmBnIVX#56OhOY6~_zfm!ZgN|1V997EJTwHkOiFURg4~QG%8OKXmzg`=5rECq xmj7!p0N`&00Q{{0fWH+0@V5d0{??WU_y-Mlhe6x<;#U9w002ovPDHLkV1jE`OzQvu literal 0 HcmV?d00001 diff --git a/src/main/resources/com/ardublock/block/uploadSim3.png b/src/main/resources/com/ardublock/block/uploadSim3.png new file mode 100644 index 0000000000000000000000000000000000000000..a311c6df74a334b9f2015948dd69b085229839db GIT binary patch literal 1082 zcmV-A1jYM_P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW zd<bNS00009a7bBm0013e0013e0hOD-bN~PV8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11Gh;;K~!jg?U>ne+cp%2KadnRQSu^7PHRo=%%n4&JWpSw@6f00 zMZH9BT*-?z?j(>4Ci13*l<jCdqwh)pF$d=d&cT5o{`~82#XCmZv;!|?D`3-X1#FtF zfK9U%uxX4<Oe&=!Ni*_1M+kwgYZ$tYu2)~rpC&*7qmj?;$R~_qlzM)H(KHR$HSt^< z&vCHr+Df~n1PsSMrdh+a&B~4gWO>d-@0uWrmyVNCGMz?DrxAue;g3&8D{Yq&kW0mR zug^)hgHut2REpD!K5>%H`s%Jt-L<G0I)<*3OG%PugkgdoMo3xyepxz%@?3J(>vM9{ z#&N9D6WrWRX3lGx;J07ec%Hp*yp)pBBw#!VO4+ZJH9thG3WbLZ$Nud1;lb`w=b^}h zy&aF^Zl{#}%4wfV#o3nueh{r3tCS*6vRS*~IaQ}y$y#+lO3C@<HGa5!C-PiToIh{J z+J#I?$$4-2PUyM-ao-Mt@}XB210c<EMh{~3DZzr3E_PzTNw<SLC$WVPxRy1`nXAE& znxRv#FVBN27ywzCaWxpOWk5>B>6bpo-8P>4+_8gJlZ(p%P}GCdULVIUidDUC;aJvM z75I^Wm!g#7yf@&a+ot|RMALI<x0(!Y#<RXKN(iHb!EMpD%o?s^((oJ_bq65?WqGyB zoKlLj-hd>{o_#w!*yZG?gKf<(f^m{^H}bi-yyl;O|9f=wuHseiLhV))vo_zP=h=Mn zJ`lwT<7q??#DsB7p36t$(k!R<^@bpf`Soyr<(#i3pmVT8r?s<koNbxKPPB@4oMiYx z$Y>hk`}Zf>?Qn`?o9yj)OYIdQBm|nael(SJejb)-u)o{jW4FWcQTtIs7kRV1ju-%r zZSwi|?!rNLBcIEwo4Ma!;`~z@p2LUs-fXTU&4`m6%Um2NFG}Lqbp8iVkK%OBq41Ek z1-ymx05wDBQTblMS_0n6d4MQMc^LPFpv6=cP{nx#eC^+nWqIlG|6kwV2x^9oWi3A_ zD;=ZNS6*>*H{otHrRllsG+jK`o?B_-IOXbk$YdJM`VRJ+tO}>n0$vg}QYwaHzo@VR zY}2G>=xCZiN=2Nc&nkG+b7<{0R@yElpy@elUAP3Wx9c&Pgk<^mFj5f335)*J2_a~= znzZ+urE<BHfc0;Sf}_KI)S)7ZQl>#f6eZu^gd|cbG)-XWMXbAyU3sy7%Da$2;Miv6 z7mYH!`=`aNfK9U%uxYjeHqBPRrr8SEH1A%(H%hg6IMCv^ApigX07*qoM6N<$g3VwM A!vFvP literal 0 HcmV?d00001 -- GitLab