From aff54895c5a3dfeaff6b56b4faf5524d66d580b2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anian=20B=C3=BChler?=
 <anian.buehler@reutlingen-university.de>
Date: Mon, 9 Aug 2021 16:26:30 +0200
Subject: [PATCH] added own BlockDrawerSet for Sim

---
 .../com/ardublock/ui/OpenblocksFrame.java     |  84 +------------
 .../com/ardublock/block/ardublock.xml         | 115 +++++++++++++++++-
 2 files changed, 116 insertions(+), 83 deletions(-)

diff --git a/src/main/java/com/ardublock/ui/OpenblocksFrame.java b/src/main/java/com/ardublock/ui/OpenblocksFrame.java
index 3390023..c54f9c3 100644
--- a/src/main/java/com/ardublock/ui/OpenblocksFrame.java
+++ b/src/main/java/com/ardublock/ui/OpenblocksFrame.java
@@ -276,83 +276,11 @@ public class OpenblocksFrame extends JFrame
 		JLabel versionLabel = new JLabel(uiMessageBundle.getString("ardublock.ui.version"));
 		//*****************************************
 		
-		//ADD ZOOM 
-		//*****************************************
+		//ADD ZOOM (currently only by CTRL +/- or mouse wheel
+		//***************************************************
 		//ZoomSlider zoomSlider = new ZoomSlider(workspace);
 		//zoomSlider.reset();
-		
-		/*
-		JButton zoomOutButton = new JButton(uiMessageBundle.getString("ardublock.ui.zoomOut"));
-		ActionListener zoomOutButtonListener = new ZoomOutButtonListener(workspace);
-		zoomOutButton.addActionListener(zoomOutButtonListener);
-		KeyStroke ctrlMinusKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, ActionEvent.CTRL_MASK);
-		zoomOutButton.registerKeyboardAction(zoomOutButtonListener, ctrlMinusKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
-		zoomOutButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.zoomOut.tooltip"));
-		
-		JButton zoomInButton = new JButton(uiMessageBundle.getString("ardublock.ui.zoomIn"));
-		ActionListener zoomInButtonListener = new ZoomInButtonListener(workspace);
-		zoomInButton.addActionListener(zoomInButtonListener);
-		KeyStroke ctrlPlusKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, ActionEvent.CTRL_MASK);
-		zoomInButton.registerKeyboardAction(zoomInButtonListener, ctrlPlusKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
-		zoomInButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.zoomIn.tooltip"));
-		
-		JButton zoomResetButton = new JButton(uiMessageBundle.getString("ardublock.ui.zoomReset"));
-		ActionListener zoomResetButtonListener = new ZoomResetButtonListener(workspace);
-		zoomResetButton.addActionListener(zoomResetButtonListener);
-		KeyStroke ctrl0KeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_0, ActionEvent.CTRL_MASK);
-		zoomResetButton.registerKeyboardAction(zoomResetButtonListener, ctrl0KeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
-		zoomResetButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.zoomReset.tooltip"));
-		*/
-		//*****************************************	
 
-		//TODO: add to an place
-		//TrashCan myTrashCan = new TrashCan(workspace, getToolkit().getImage("src/main/resources/com/ardublock/block/trash.png"), getToolkit().getImage("src/main/resources/com/ardublock/block/trash_open.png"));
-		//topPanel.add(myTrashCan);
-		
-		//SWITCH BLOCK MENU EXPERT/STANDARD 
-		//*****************************************
-		/*JButton modeButton = new JButton(uiMessageBundle.getString("ardublock.ui.modeButton.mode.expert"));
-		ActionListener modeButtonListener = new ActionListener () {
-			public void actionPerformed(ActionEvent e) {
-			//TODO: check if Desktop is not necessary on all plattforms
-			   // Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
-			   // if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
-				
-				//TODO: check if zoom handling is possible in WorkspacecController
-				//get current zoomLevel
-				int currentWorkspaceZoom = zoomSlider.getValue();
-				
-			        try {
-			        	WorkspaceController workspaceController = context.getWorkspaceController();
-				        if(!workspaceModeState){
-				        	workspaceController.loadProject(getArduBlockString(), null , "custom");	
-				        	modeButton.setText(uiMessageBundle.getString("ardublock.ui.modeButton.mode.standard"));
-				        	generateButton.setVisible(true);
-				        	simulateButton.setVisible(false);
-				        }
-				        else{
-				        	workspaceController.loadProject(getArduBlockString(), null , "default");
-				        	modeButton.setText(uiMessageBundle.getString("ardublock.ui.modeButton.mode.expert"));
-				        	generateButton.setVisible(false);
-				        	simulateButton.setVisible(true);
-				        }
-				        zoomSlider.reset();
-				        zoomSlider.setValue(currentWorkspaceZoom);
-				        workspaceModeState=!workspaceModeState;
-				        
-			        } catch (Exception e1) {
-			            //e1.printStackTrace();
-			        }
-			   //}
-			}
-		};
-		modeButton.addActionListener(modeButtonListener);
-		KeyStroke ctrleKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.CTRL_MASK);
-		modeButton.registerKeyboardAction(modeButtonListener, ctrleKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
-		modeButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.modeButton.mode.tooltip"));*/
-		//*****************************************
-		
-		
 		
 		//TODO: TEST SAVE DEFAULT
 		//Save new default program
@@ -406,8 +334,6 @@ public class OpenblocksFrame extends JFrame
 			}
 		};
 		modeBasicButton.addActionListener(modeBasicButtonListener);
-		//KeyStroke ctrleKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.CTRL_MASK);
-		//modeBasicButton.registerKeyboardAction(modeBasicButtonListener, ctrleKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
 		modeBasicButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.standard.tooltip"));
 		
 		//Workspace: PRO
@@ -450,8 +376,6 @@ public class OpenblocksFrame extends JFrame
 			}
 		};
 		modeProButton.addActionListener(modeProButtonListener);
-		//KeyStroke ctrleKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.CTRL_MASK);
-		//modeProButton.registerKeyboardAction(modeBasicButtonListener, ctrleKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
 		modeProButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.expert.tooltip"));
 		
 		//Workspace: SIM
@@ -473,7 +397,7 @@ public class OpenblocksFrame extends JFrame
 				try {
 				  	WorkspaceController workspaceController = context.getWorkspaceController();
 				  	//TODO check if reduced sim-blockset is necessary
-				   	workspaceController.loadProject(getArduBlockString(), null , "default");
+				   	workspaceController.loadProject(getArduBlockString(), null , "page");
 				    generateButton.setVisible(false);
 				    simulateButton.setVisible(true);
 				    simulatorHelpButton.setVisible(true);
@@ -496,8 +420,6 @@ public class OpenblocksFrame extends JFrame
 			}
 		};
 		modeSimButton.addActionListener(modeSimButtonListener);
-		//KeyStroke ctrleKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.CTRL_MASK);
-		//modeProButton.registerKeyboardAction(modeBasicButtonListener, ctrleKeyStroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
 		modeSimButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.mode.sim.tooltip"));
 		//*****************************************
 		
diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml
index 7259e21..c9ea767 100644
--- a/src/main/resources/com/ardublock/block/ardublock.xml
+++ b/src/main/resources/com/ardublock/block/ardublock.xml
@@ -2774,6 +2774,25 @@
 				<BlockGenusMember>subroutine_varret_com</BlockGenusMember>
 				<BlockGenusMember>subroutine-ref_varret</BlockGenusMember>-->
 			</BlockDrawer>
+			<BlockDrawer button-color="255 215 0" name="bd.control" type="page"> 
+				<BlockGenusMember>controlDivider1</BlockGenusMember>
+				<BlockGenusMember>loop</BlockGenusMember>
+				<BlockGenusMember>sketch</BlockGenusMember>
+				
+				<BlockGenusMember>controlDivider2</BlockGenusMember>
+				<BlockGenusMember>if</BlockGenusMember>
+				<BlockGenusMember>elseif</BlockGenusMember>
+				<BlockGenusMember>else</BlockGenusMember>
+				<BlockGenusMember>controlDivider3</BlockGenusMember>
+				<BlockGenusMember>while</BlockGenusMember>
+				
+				<BlockGenusMember>repeat_times</BlockGenusMember>
+				<BlockGenusMember>repeat</BlockGenusMember>
+				
+				<BlockGenusMember>controlDivider4</BlockGenusMember>
+				<BlockGenusMember>delay</BlockGenusMember>
+				<BlockGenusMember>wait</BlockGenusMember>
+			</BlockDrawer>
 			
 			<BlockDrawer button-color="200 220 0" name="bd.subroutines" type="default">
 				<BlockGenusMember>subroutine_com</BlockGenusMember>
@@ -2802,6 +2821,10 @@
 				<BlockGenusMember>subroutineDivider3</BlockGenusMember>
 				<BlockGenusMember>interrupt</BlockGenusMember>
 			</BlockDrawer>
+			<BlockDrawer button-color="200 220 0" name="bd.subroutines" type="page">
+				<BlockGenusMember>subroutine_com</BlockGenusMember>
+				<BlockGenusMember>subroutine-ref</BlockGenusMember>
+			</BlockDrawer>
 			
 			<BlockDrawer button-color="74 108 212" name="bd.output"	type="default">
 				<BlockGenusMember>pin-write-digital</BlockGenusMember>
@@ -2835,11 +2858,15 @@
 				<BlockGenusMember>stepper_set_rpm</BlockGenusMember>
 				<BlockGenusMember>stepper_steps</BlockGenusMember>
 			</BlockDrawer>
+			<BlockDrawer button-color="74 108 212" name="bd.output"	type="page">
+				<BlockGenusMember>pin-write-digital</BlockGenusMember>
+				<BlockGenusMember>pin-write-analog</BlockGenusMember>
+			</BlockDrawer>
 			
 			<BlockDrawer button-color="44 165 226" name="bd.input" type="default">
 				<BlockGenusMember>pin-read-digital</BlockGenusMember>
 				<BlockGenusMember>pin-read-analog</BlockGenusMember>
-				<!--   <BlockGenusMember>pin-read-digital-pullup</BlockGenusMember> Nur für Sim rausgenommen-->	
+				<BlockGenusMember>pin-read-digital-pullup</BlockGenusMember>
 			</BlockDrawer>
 			<BlockDrawer button-color="44 165 226" name="bd.input" type="custom">
 				<BlockGenusMember>inputDivider1</BlockGenusMember>
@@ -2862,6 +2889,10 @@
 				<BlockGenusMember>dht_sensor_read_humid</BlockGenusMember>
 				<BlockGenusMember>dht_sensor_calc_index</BlockGenusMember>
 			</BlockDrawer>
+			<BlockDrawer button-color="44 165 226" name="bd.input" type="page">
+				<BlockGenusMember>pin-read-digital</BlockGenusMember>
+				<BlockGenusMember>pin-read-analog</BlockGenusMember>
+			</BlockDrawer>
 			
 			<BlockDrawer button-color="255 20 147" name="bd.logic" type="default">
 				<BlockGenusMember>logicDivider1</BlockGenusMember> 
@@ -2912,6 +2943,23 @@
 				<BlockGenusMember>bit_shift_left</BlockGenusMember>
 				<BlockGenusMember>bit_shift_right</BlockGenusMember>
 			</BlockDrawer>
+			<BlockDrawer button-color="255 20 147" name="bd.logic" type="page">
+				<BlockGenusMember>logicDivider1</BlockGenusMember> 
+				<BlockGenusMember>and</BlockGenusMember>
+				<BlockGenusMember>or</BlockGenusMember>
+				<BlockGenusMember>not</BlockGenusMember>
+				
+				<BlockGenusMember>logicDivider2</BlockGenusMember> 
+				<BlockGenusMember>equal_digital</BlockGenusMember>
+				<BlockGenusMember>not_equal_digital</BlockGenusMember>
+				
+				<BlockGenusMember>greater</BlockGenusMember>
+				<BlockGenusMember>less</BlockGenusMember>
+				<BlockGenusMember>equal</BlockGenusMember>
+				<BlockGenusMember>greater_equal</BlockGenusMember>
+				<BlockGenusMember>less_equal</BlockGenusMember>
+				<BlockGenusMember>not_equal</BlockGenusMember>
+			</BlockDrawer>
 			
 			<BlockDrawer button-color="160 32 240" name="bd.operators"	type="default">
 				<BlockGenusMember>mathDivider1</BlockGenusMember> 
@@ -2963,6 +3011,28 @@
 				<BlockGenusMember>random</BlockGenusMember>
 				<BlockGenusMember>random_range</BlockGenusMember>
 			</BlockDrawer>
+			<BlockDrawer button-color="160 32 240" name="bd.operators"	type="page">
+				<BlockGenusMember>mathDivider1</BlockGenusMember> 
+				<BlockGenusMember>addition</BlockGenusMember>
+				<BlockGenusMember>subtraction</BlockGenusMember>
+				<BlockGenusMember>multiplication</BlockGenusMember>
+				<BlockGenusMember>division</BlockGenusMember>
+				
+				<BlockGenusMember>modulo</BlockGenusMember>
+				<BlockGenusMember>abs</BlockGenusMember>
+				
+				<BlockGenusMember>min</BlockGenusMember>
+				<BlockGenusMember>max</BlockGenusMember>
+				
+				<BlockGenusMember>mathDivider2</BlockGenusMember>
+				<BlockGenusMember>map_common</BlockGenusMember>
+				<BlockGenusMember>map</BlockGenusMember>
+				<BlockGenusMember>constrain</BlockGenusMember>
+				
+				<BlockGenusMember>mathDivider3</BlockGenusMember>
+				<BlockGenusMember>random</BlockGenusMember>
+				<BlockGenusMember>random_range</BlockGenusMember>
+			</BlockDrawer>
 			
 			<BlockDrawer button-color="255 50 0" name="bd.cast" type="custom">
 				<BlockGenusMember>cast_number</BlockGenusMember>
@@ -3047,6 +3117,33 @@
 				<BlockGenusMember>variable_file</BlockGenusMember>
 				<BlockGenusMember>local_variable_file</BlockGenusMember>
 			</BlockDrawer>
+			<BlockDrawer button-color="255 0 0" name="bd.number" type="page">
+				<BlockGenusMember>numberDivider1</BlockGenusMember>
+				<BlockGenusMember>millis</BlockGenusMember>
+				
+				<BlockGenusMember>numberDivider2</BlockGenusMember>
+								
+				<BlockGenusMember>setter_variable_analog</BlockGenusMember>
+				<BlockGenusMember>create_variable_analog</BlockGenusMember>
+				
+				<BlockGenusMember>setter_variable_digital</BlockGenusMember>
+				<BlockGenusMember>variable_digital</BlockGenusMember>
+				<BlockGenusMember>local_variable_digital</BlockGenusMember><!-- nur für Sim -> später anpassen -->
+		
+				<BlockGenusMember>digital-high</BlockGenusMember>
+				<BlockGenusMember>digital-low</BlockGenusMember>
+				<BlockGenusMember>true</BlockGenusMember>
+				<BlockGenusMember>false</BlockGenusMember>
+				
+				<BlockGenusMember>numberDivider3</BlockGenusMember>
+				<BlockGenusMember>setter_variable_number</BlockGenusMember>	
+				<BlockGenusMember>variable_number</BlockGenusMember>	
+				<BlockGenusMember>local_variable_number</BlockGenusMember><!-- nur für Sim -> später anpassen -->
+				<BlockGenusMember>number</BlockGenusMember>
+
+				<BlockGenusMember>numberDivider4</BlockGenusMember>
+				<BlockGenusMember>string</BlockGenusMember>
+			</BlockDrawer>
 			
 			<BlockDrawer button-color="200 0 0" name="bd.array" type="custom">
 				<BlockGenusMember>arrayDivider1</BlockGenusMember>							
@@ -3066,7 +3163,7 @@
 			<BlockDrawer button-color="165 42 42" name="bd.communication" type="default">
 				<BlockGenusMember>communicationDivider1</BlockGenusMember>
 				<BlockGenusMember>serial_print</BlockGenusMember>
-				<!--  <BlockGenusMember>soft_serial_print</BlockGenusMember> Nur für Sim rausgenommen -->
+				<BlockGenusMember>soft_serial_print</BlockGenusMember>
 				
 				<BlockGenusMember>communicationDivider3</BlockGenusMember>
 				<BlockGenusMember>glue_digital</BlockGenusMember>
@@ -3111,6 +3208,15 @@
 				<BlockGenusMember>mqtt_set_frame</BlockGenusMember>
 				<BlockGenusMember>mqtt_read_frame</BlockGenusMember>-->
 			</BlockDrawer>
+			<BlockDrawer button-color="165 42 42" name="bd.communication" type="page">
+				<BlockGenusMember>communicationDivider1</BlockGenusMember>
+				<BlockGenusMember>serial_print</BlockGenusMember>
+				
+				<BlockGenusMember>communicationDivider3</BlockGenusMember>
+				<BlockGenusMember>glue_digital</BlockGenusMember>
+				<BlockGenusMember>glue_number</BlockGenusMember>
+				<BlockGenusMember>glue_string</BlockGenusMember>
+			</BlockDrawer>
 			
 			<BlockDrawer button-color="0 32 96" name="bd.storage" type="custom">
 				<BlockGenusMember>storageDivider1</BlockGenusMember>
@@ -3146,6 +3252,11 @@
 				<BlockGenusMember>code_head</BlockGenusMember>
 				<BlockGenusMember>code_loop</BlockGenusMember>
 			</BlockDrawer>
+			<BlockDrawer button-color="0 150 156" name="bd.code" type="page">
+				<BlockGenusMember>program_comment</BlockGenusMember>
+				<BlockGenusMember>code_comment</BlockGenusMember>
+				<BlockGenusMember>code_comment_head</BlockGenusMember>
+			</BlockDrawer>
 			
 			<!-- Shapes are automatically loaded as blocks in the Shapes drawer (see slcodeblocks.ShapeBlocksGenerator for details) -->
 			<!-- Sound blocks reside in the auto-generated String drawer. (see slcodeblocks.SoundBlocksGenerator for details) -->
-- 
GitLab