From daa23f81001570dc046d28486520d1edf17997a4 Mon Sep 17 00:00:00 2001 From: "laurent.schall" Date: Fri, 24 Mar 2017 15:30:39 +0100 Subject: [PATCH 1/6] packaging 1 --- .../blocks/codeblocks/CompilerException.java | 19 +++++++------ .../codeblocks/JComponentDragHandler.java | 8 ++---- .../{closed_hand.png => closed_hand.gif} | Bin .../{open_hand.png => open_hand.gif} | Bin .../mit/blocks/codeblockutil/GlassCard.java | 20 +++----------- .../blocks/codeblockutil/GlassExplorer.java | 26 ++---------------- .../controller/WorkspaceController.java | 4 +-- .../edu/mit/blocks/renderable/BlockLabel.java | 2 -- .../renderable/FactoryRenderableBlock.java | 2 +- .../blocks/renderable/RenderableBlock.java | 26 ++++-------------- .../java/edu/mit/blocks/workspace/Page.java | 3 +- 11 files changed, 28 insertions(+), 82 deletions(-) rename src/main/java/edu/mit/blocks/codeblocks/{closed_hand.png => closed_hand.gif} (100%) rename src/main/java/edu/mit/blocks/codeblocks/{open_hand.png => open_hand.gif} (100%) diff --git a/src/main/java/edu/mit/blocks/codeblocks/CompilerException.java b/src/main/java/edu/mit/blocks/codeblocks/CompilerException.java index 0f597f5..5821e2a 100644 --- a/src/main/java/edu/mit/blocks/codeblocks/CompilerException.java +++ b/src/main/java/edu/mit/blocks/codeblocks/CompilerException.java @@ -6,7 +6,7 @@ public class CompilerException extends Exception { private static final long serialVersionUID = 1L; - enum Error { + public enum Error { UNSUPPORTED_VALUE } @@ -23,12 +23,15 @@ public CompilerException(Error error, Workspace workspace, Long illegalBlockID) } public String getMessage() { - StringBuilder ans = new StringBuilder(USE_DEBUGGING_MESSAGES ? "Block " + illegalBlockID + " " + label + ": " : ""); - if (error.name().equals(Error.UNSUPPORTED_VALUE.name())) { - ans.append("Unsupported value."); - } else { - ans.append("Unknown error"); - } - return ans.toString(); + StringBuilder ans = new StringBuilder(USE_DEBUGGING_MESSAGES ? "Block " + illegalBlockID + " " + label + ": " : ""); + switch (error) { + case UNSUPPORTED_VALUE: + ans.append("Unsupported value."); + break; + default: + ans.append("Unknown error"); + } + + return ans.toString(); } } diff --git a/src/main/java/edu/mit/blocks/codeblocks/JComponentDragHandler.java b/src/main/java/edu/mit/blocks/codeblocks/JComponentDragHandler.java index 2e54e7d..ffa6646 100644 --- a/src/main/java/edu/mit/blocks/codeblocks/JComponentDragHandler.java +++ b/src/main/java/edu/mit/blocks/codeblocks/JComponentDragHandler.java @@ -145,17 +145,13 @@ public void mousePressed(MouseEvent e) { oldLocY = myComponent.getY(); } - public void mouseDragged(MouseEvent e) { - mouseDragged(e, false); - } - /** * This method is called when the mouse is dragged over the JComponent. * Moves the JComponent by the amount of the drag such that the point * under which the mouse the pressed remains under the mouse cursor. In * other words, "drags" the JComponent. */ - public void mouseDragged(MouseEvent e, boolean skip) { + public void mouseDragged(MouseEvent e) { //System.out.println("mouse dragged: "+this.getLocation()); myComponent.setCursor(closedHandCursor); mCurrentX = e.getX(); @@ -185,7 +181,7 @@ public void mouseDragged(MouseEvent e, boolean skip) { dragDY = newY - myComponent.getY(); // move to the new location - if ( ! skip) myComponent.setLocation(newX, newY); + myComponent.setLocation(newX, newY); } /** diff --git a/src/main/java/edu/mit/blocks/codeblocks/closed_hand.png b/src/main/java/edu/mit/blocks/codeblocks/closed_hand.gif similarity index 100% rename from src/main/java/edu/mit/blocks/codeblocks/closed_hand.png rename to src/main/java/edu/mit/blocks/codeblocks/closed_hand.gif diff --git a/src/main/java/edu/mit/blocks/codeblocks/open_hand.png b/src/main/java/edu/mit/blocks/codeblocks/open_hand.gif similarity index 100% rename from src/main/java/edu/mit/blocks/codeblocks/open_hand.png rename to src/main/java/edu/mit/blocks/codeblocks/open_hand.gif diff --git a/src/main/java/edu/mit/blocks/codeblockutil/GlassCard.java b/src/main/java/edu/mit/blocks/codeblockutil/GlassCard.java index a1398eb..d032573 100644 --- a/src/main/java/edu/mit/blocks/codeblockutil/GlassCard.java +++ b/src/main/java/edu/mit/blocks/codeblockutil/GlassCard.java @@ -47,16 +47,11 @@ public class GlassCard implements ActionListener, PropertyChangeListener { /** the canvas that is wrapped by this card */ private Canvas canvas; /** The button of this */ - public GlassButton button; + private CButton button; /** The scroll that canvas lives in */ private CScrollPane scroll; private final static int SCROLLBAR_WIDTH = 18; - - void displayAsSelected(boolean displayAsSelected) { - button.displayAsSelected = displayAsSelected; - } - /** * constructor * @param i @@ -95,7 +90,7 @@ public void actionPerformed(ActionEvent e) { /** * @return the button */ - CButton getButton() { + JComponent getButton() { return button; } @@ -129,8 +124,6 @@ public void propertyChange(PropertyChangeEvent e) { private class GlassButton extends CButton { - boolean displayAsSelected = false; - private static final long serialVersionUID = 328149080429L; //To get the shadow effect the text must be displayed multiple times at //multiple locations. x represents the center, white label. @@ -170,16 +163,11 @@ public void paint(Graphics g) { g2.drawRoundRect(INSET, INSET, buttonWidth, buttonHeight, arc, arc); } else { //paint highlightlayer - if (this.displayAsSelected) { + if (this.focus) { gb.setColor(Color.yellow); - gb.setStroke(new BasicStroke(30)); + gb.setStroke(new BasicStroke(3)); gb.drawRoundRect(INSET, INSET, buttonWidth, buttonHeight, arc, arc); gb.setStroke(new BasicStroke(1)); - } else if (this.focus) { - gb.setColor(Color.yellow); - gb.setStroke(new BasicStroke(3)); - gb.drawRoundRect(INSET, INSET, buttonWidth, buttonHeight, arc, arc); - gb.setStroke(new BasicStroke(1)); } // Paint the first layer gb.setColor(canvas.getColor().darker()); diff --git a/src/main/java/edu/mit/blocks/codeblockutil/GlassExplorer.java b/src/main/java/edu/mit/blocks/codeblockutil/GlassExplorer.java index c5aeced..45d28ff 100644 --- a/src/main/java/edu/mit/blocks/codeblockutil/GlassExplorer.java +++ b/src/main/java/edu/mit/blocks/codeblockutil/GlassExplorer.java @@ -17,12 +17,9 @@ import java.util.ArrayList; import java.util.List; -import javax.swing.Icon; -import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.Timer; -import javax.swing.UIManager; import edu.mit.blocks.workspace.Workspace; @@ -144,16 +141,10 @@ public void setDrawersCard(List items) { * @param index */ public void selectCanvas(int index) { - - drawers.forEach(card -> card.displayAsSelected(false)); - if ((!timer.timer.isRunning()) || (this.selectedCanvasIndex != index)) { if (index >= 0 && index < drawers.size()) { this.selectedCanvasIndex = index; GlassCard card = drawers.get(index); - - card.displayAsSelected(true); - canvasPane.removeAll(); canvasPane.add(card.getScroll()); canvasPane.setBackground(card.getBackgorundColor()); @@ -192,6 +183,7 @@ public JComponent getJComponent() { * Rolls the canvasPane back underneath when focus is lost */ public void focusLost(FocusEvent e) { + timer.shrink(); } public void focusGained(FocusEvent e) { @@ -212,22 +204,12 @@ private class CanvasPane extends JPanel { private JPanel extraPanel; // border around the extraPanel to leave room for the CanvasPane // decorations like rounded corners and a little blank space. - private Insets insets = new Insets(15 +10/*start after the close button*/, 5, 35, 3); + private Insets insets = new Insets(15, 5, 35, 3); /** * Creates a new CanvasPane */ public CanvasPane() { - - Icon icon = UIManager.getIcon("InternalFrame.closeIcon"); - JButton closeBtn = new JButton("Close", icon); - closeBtn.setOpaque(true); - closeBtn.setBackground(new Color(190, 200, 220)); - closeBtn.addActionListener(e -> { - timer.shrink(); - }); - super.add(closeBtn); - // the extraPanel only exists for sizing reasons. It is invisible. // Without it, when the CanvasPane opens (gets wider), the contents // try to resize themselves. The extraPanel gives the contents @@ -352,7 +334,7 @@ public void actionPerformed(ActionEvent e) { canvasPane.repaint(); } } else { - if (canvasPane.getWidth() > 3) { + if (canvasPane.getWidth() > 3) { canvasPane.setSize(canvasPane.getWidth() / 3, canvasHeight); canvasPane.revalidate(); canvasPane.repaint(); @@ -379,10 +361,8 @@ public void expand() { * Shrinks the canvasPane */ public void shrink() { - drawers.forEach(card -> card.displayAsSelected(false)); this.expand = false; timer.start(); - repaint(); } } } diff --git a/src/main/java/edu/mit/blocks/controller/WorkspaceController.java b/src/main/java/edu/mit/blocks/controller/WorkspaceController.java index c93fc4c..6143460 100644 --- a/src/main/java/edu/mit/blocks/controller/WorkspaceController.java +++ b/src/main/java/edu/mit/blocks/controller/WorkspaceController.java @@ -542,9 +542,7 @@ public Iterable getAllSearchableContainers() { * invoked from the event-dispatching thread. */ private void createAndShowGUI() { - String dir = System.getProperty("user.dir"); - String[] split = dir.split("\\" + File.separator); - frame = new JFrame(split[split.length -1] + " "+ System.getProperty("java.version")); + frame = new JFrame("WorkspaceDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 100, 500, 500); final SearchBar sb = new SearchBar("Search blocks", diff --git a/src/main/java/edu/mit/blocks/renderable/BlockLabel.java b/src/main/java/edu/mit/blocks/renderable/BlockLabel.java index f3f4d38..0eae4bb 100644 --- a/src/main/java/edu/mit/blocks/renderable/BlockLabel.java +++ b/src/main/java/edu/mit/blocks/renderable/BlockLabel.java @@ -326,11 +326,9 @@ public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_ESCAPE: workspace.getEnv().getRenderableBlock(blockID).requestFocus(); - e.consume(); return; case KeyEvent.VK_ENTER: workspace.getEnv().getRenderableBlock(blockID).requestFocus(); - e.consume(); return; case KeyEvent.VK_TAB: workspace.getEnv().getRenderableBlock(blockID).processKeyPressed(e); diff --git a/src/main/java/edu/mit/blocks/renderable/FactoryRenderableBlock.java b/src/main/java/edu/mit/blocks/renderable/FactoryRenderableBlock.java index 57fdb82..c6ec34a 100644 --- a/src/main/java/edu/mit/blocks/renderable/FactoryRenderableBlock.java +++ b/src/main/java/edu/mit/blocks/renderable/FactoryRenderableBlock.java @@ -74,7 +74,7 @@ public void mouseDragged(MouseEvent e) { if (createdRB != null) { //translate this e to a MouseEvent for createdRB MouseEvent newE = SwingUtilities.convertMouseEvent(this, e, createdRB); - createdRB.mouseDragged(newE, false); + createdRB.mouseDragged(newE); createdRB_dragged = true; } } diff --git a/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java b/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java index 242c466..a37023f 100644 --- a/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java +++ b/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java @@ -1455,7 +1455,7 @@ public void moveConnectedBlocks() { } } - private void startDragging(RenderableBlock renderable, WorkspaceWidget widget, boolean skip) { + private void startDragging(RenderableBlock renderable, WorkspaceWidget widget) { renderable.pickedUp = true; renderable.lastDragWidget = widget; if (renderable.hasComment()) { @@ -1463,16 +1463,12 @@ private void startDragging(RenderableBlock renderable, WorkspaceWidget widget, b } Component oldParent = renderable.getParent(); Workspace workspace = renderable.getWorkspace(); - if (! skip) { - // With Java 8u45, this call breaks the mouseDragged event receiving - workspace.addToBlockLayer(renderable); - // Having this call without the previous addToBlockLayer() one shifts the block to a wrong location - renderable.setLocation(SwingUtilities.convertPoint(oldParent, renderable.getLocation(), workspace)); - } + workspace.addToBlockLayer(renderable); + renderable.setLocation(SwingUtilities.convertPoint(oldParent, renderable.getLocation(), workspace)); renderable.setHighlightParent(workspace); for (BlockConnector socket : BlockLinkChecker.getSocketEquivalents(workspace.getEnv().getBlock(renderable.blockID))) { if (socket.hasBlock()) { - startDragging(workspace.getEnv().getRenderableBlock(socket.getBlockID()), widget, skip); + startDragging(workspace.getEnv().getRenderableBlock(socket.getBlockID()), widget); } } } @@ -1609,20 +1605,9 @@ public void mouseReleased(MouseEvent e) { popup.show(this, e.getX(), e.getY()); } workspace.getMiniMap().repaint(); - - drag = 0; } - int drag = 0; - public void mouseDragged(MouseEvent e) { - mouseDragged(e, true); - } - - public void mouseDragged(MouseEvent e, boolean skip) { - - drag++; - if (SwingUtilities.isLeftMouseButton(e)) { if (pickedUp) { Point pp = SwingUtilities.convertPoint(this, e.getPoint(), workspace.getMiniMap()); @@ -1659,7 +1644,7 @@ public void mouseDragged(MouseEvent e, boolean skip) { //NOTIFY WORKSPACE LISTENERS OF DISCONNECTION workspace.notifyListeners(new WorkspaceEvent(workspace, widget, link, WorkspaceEvent.BLOCKS_DISCONNECTED)); } - startDragging(this, widget, skip && drag == 1); + startDragging(this, widget); } // drag this block and all attached to it @@ -2028,7 +2013,6 @@ public void setBlockToolTip(String text) { this.blockLabel.setToolTipText(text); } - @Override protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { switch (e.getKeyCode()) { diff --git a/src/main/java/edu/mit/blocks/workspace/Page.java b/src/main/java/edu/mit/blocks/workspace/Page.java index 82b022b..de3a98f 100644 --- a/src/main/java/edu/mit/blocks/workspace/Page.java +++ b/src/main/java/edu/mit/blocks/workspace/Page.java @@ -100,7 +100,7 @@ public class Page implements WorkspaceWidget, SearchableContainer, ISupportMemen /** The default abstract width */ private static final int DEFAULT_ABSTRACT_WIDTH = 700; /** The default abstract height */ - public static final int DEFAULT_ABSTRACT_HEIGHT = 1600 *5; + public static final int DEFAULT_ABSTRACT_HEIGHT = 1600; /** An empty string */ private static final String emptyString = ""; /** this.zoomLevel: zoom level state */ @@ -1195,7 +1195,6 @@ public void paintComponent(Graphics g) { /** @overrides RBParent.addToBlockLayer() */ @Override public void addToBlockLayer(Component c) { - this.remove(c); this.add(c, BLOCK_LAYER); } From e11fa4c605788d4d4a6b3263db7f99405eaff7dd Mon Sep 17 00:00:00 2001 From: "laurent.schall" Date: Fri, 24 Mar 2017 15:33:31 +0100 Subject: [PATCH 2/6] packaging 2 --- .../codeblocks/{closed_hand.gif => closed_hand.png} | Bin .../codeblocks/{open_hand.gif => open_hand.png} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename src/main/java/edu/mit/blocks/codeblocks/{closed_hand.gif => closed_hand.png} (100%) rename src/main/java/edu/mit/blocks/codeblocks/{open_hand.gif => open_hand.png} (100%) diff --git a/src/main/java/edu/mit/blocks/codeblocks/closed_hand.gif b/src/main/java/edu/mit/blocks/codeblocks/closed_hand.png similarity index 100% rename from src/main/java/edu/mit/blocks/codeblocks/closed_hand.gif rename to src/main/java/edu/mit/blocks/codeblocks/closed_hand.png diff --git a/src/main/java/edu/mit/blocks/codeblocks/open_hand.gif b/src/main/java/edu/mit/blocks/codeblocks/open_hand.png similarity index 100% rename from src/main/java/edu/mit/blocks/codeblocks/open_hand.gif rename to src/main/java/edu/mit/blocks/codeblocks/open_hand.png From a62707f940d43b5b7995c094ec1e0660a37a09d8 Mon Sep 17 00:00:00 2001 From: "laurent.schall" Date: Fri, 24 Mar 2017 15:34:29 +0100 Subject: [PATCH 3/6] packaging 3 --- src/main/java/edu/mit/blocks/renderable/BlockLabel.java | 2 ++ src/main/java/edu/mit/blocks/renderable/RenderableBlock.java | 1 + src/main/java/edu/mit/blocks/workspace/Page.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/mit/blocks/renderable/BlockLabel.java b/src/main/java/edu/mit/blocks/renderable/BlockLabel.java index 0eae4bb..f3f4d38 100644 --- a/src/main/java/edu/mit/blocks/renderable/BlockLabel.java +++ b/src/main/java/edu/mit/blocks/renderable/BlockLabel.java @@ -326,9 +326,11 @@ public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_ESCAPE: workspace.getEnv().getRenderableBlock(blockID).requestFocus(); + e.consume(); return; case KeyEvent.VK_ENTER: workspace.getEnv().getRenderableBlock(blockID).requestFocus(); + e.consume(); return; case KeyEvent.VK_TAB: workspace.getEnv().getRenderableBlock(blockID).processKeyPressed(e); diff --git a/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java b/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java index a37023f..e7f4d48 100644 --- a/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java +++ b/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java @@ -2013,6 +2013,7 @@ public void setBlockToolTip(String text) { this.blockLabel.setToolTipText(text); } + @Override protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { switch (e.getKeyCode()) { diff --git a/src/main/java/edu/mit/blocks/workspace/Page.java b/src/main/java/edu/mit/blocks/workspace/Page.java index de3a98f..cf25f04 100644 --- a/src/main/java/edu/mit/blocks/workspace/Page.java +++ b/src/main/java/edu/mit/blocks/workspace/Page.java @@ -100,7 +100,7 @@ public class Page implements WorkspaceWidget, SearchableContainer, ISupportMemen /** The default abstract width */ private static final int DEFAULT_ABSTRACT_WIDTH = 700; /** The default abstract height */ - public static final int DEFAULT_ABSTRACT_HEIGHT = 1600; + public static final int DEFAULT_ABSTRACT_HEIGHT = 1600 *5; /** An empty string */ private static final String emptyString = ""; /** this.zoomLevel: zoom level state */ From 7ef2ebaff1f15c1dc0a51b5c8c1779374cf307bf Mon Sep 17 00:00:00 2001 From: "laurent.schall" Date: Fri, 24 Mar 2017 15:43:58 +0100 Subject: [PATCH 4/6] packaging 4 --- .../codeblocks/JComponentDragHandler.java | 8 ++++-- .../controller/WorkspaceController.java | 4 ++- .../renderable/FactoryRenderableBlock.java | 2 +- .../blocks/renderable/RenderableBlock.java | 25 +++++++++++++++---- .../java/edu/mit/blocks/workspace/Page.java | 1 + 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/main/java/edu/mit/blocks/codeblocks/JComponentDragHandler.java b/src/main/java/edu/mit/blocks/codeblocks/JComponentDragHandler.java index ffa6646..2e54e7d 100644 --- a/src/main/java/edu/mit/blocks/codeblocks/JComponentDragHandler.java +++ b/src/main/java/edu/mit/blocks/codeblocks/JComponentDragHandler.java @@ -145,13 +145,17 @@ public void mousePressed(MouseEvent e) { oldLocY = myComponent.getY(); } + public void mouseDragged(MouseEvent e) { + mouseDragged(e, false); + } + /** * This method is called when the mouse is dragged over the JComponent. * Moves the JComponent by the amount of the drag such that the point * under which the mouse the pressed remains under the mouse cursor. In * other words, "drags" the JComponent. */ - public void mouseDragged(MouseEvent e) { + public void mouseDragged(MouseEvent e, boolean skip) { //System.out.println("mouse dragged: "+this.getLocation()); myComponent.setCursor(closedHandCursor); mCurrentX = e.getX(); @@ -181,7 +185,7 @@ public void mouseDragged(MouseEvent e) { dragDY = newY - myComponent.getY(); // move to the new location - myComponent.setLocation(newX, newY); + if ( ! skip) myComponent.setLocation(newX, newY); } /** diff --git a/src/main/java/edu/mit/blocks/controller/WorkspaceController.java b/src/main/java/edu/mit/blocks/controller/WorkspaceController.java index 6143460..c93fc4c 100644 --- a/src/main/java/edu/mit/blocks/controller/WorkspaceController.java +++ b/src/main/java/edu/mit/blocks/controller/WorkspaceController.java @@ -542,7 +542,9 @@ public Iterable getAllSearchableContainers() { * invoked from the event-dispatching thread. */ private void createAndShowGUI() { - frame = new JFrame("WorkspaceDemo"); + String dir = System.getProperty("user.dir"); + String[] split = dir.split("\\" + File.separator); + frame = new JFrame(split[split.length -1] + " "+ System.getProperty("java.version")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 100, 500, 500); final SearchBar sb = new SearchBar("Search blocks", diff --git a/src/main/java/edu/mit/blocks/renderable/FactoryRenderableBlock.java b/src/main/java/edu/mit/blocks/renderable/FactoryRenderableBlock.java index c6ec34a..57fdb82 100644 --- a/src/main/java/edu/mit/blocks/renderable/FactoryRenderableBlock.java +++ b/src/main/java/edu/mit/blocks/renderable/FactoryRenderableBlock.java @@ -74,7 +74,7 @@ public void mouseDragged(MouseEvent e) { if (createdRB != null) { //translate this e to a MouseEvent for createdRB MouseEvent newE = SwingUtilities.convertMouseEvent(this, e, createdRB); - createdRB.mouseDragged(newE); + createdRB.mouseDragged(newE, false); createdRB_dragged = true; } } diff --git a/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java b/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java index e7f4d48..242c466 100644 --- a/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java +++ b/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java @@ -1455,7 +1455,7 @@ public void moveConnectedBlocks() { } } - private void startDragging(RenderableBlock renderable, WorkspaceWidget widget) { + private void startDragging(RenderableBlock renderable, WorkspaceWidget widget, boolean skip) { renderable.pickedUp = true; renderable.lastDragWidget = widget; if (renderable.hasComment()) { @@ -1463,12 +1463,16 @@ private void startDragging(RenderableBlock renderable, WorkspaceWidget widget) { } Component oldParent = renderable.getParent(); Workspace workspace = renderable.getWorkspace(); - workspace.addToBlockLayer(renderable); - renderable.setLocation(SwingUtilities.convertPoint(oldParent, renderable.getLocation(), workspace)); + if (! skip) { + // With Java 8u45, this call breaks the mouseDragged event receiving + workspace.addToBlockLayer(renderable); + // Having this call without the previous addToBlockLayer() one shifts the block to a wrong location + renderable.setLocation(SwingUtilities.convertPoint(oldParent, renderable.getLocation(), workspace)); + } renderable.setHighlightParent(workspace); for (BlockConnector socket : BlockLinkChecker.getSocketEquivalents(workspace.getEnv().getBlock(renderable.blockID))) { if (socket.hasBlock()) { - startDragging(workspace.getEnv().getRenderableBlock(socket.getBlockID()), widget); + startDragging(workspace.getEnv().getRenderableBlock(socket.getBlockID()), widget, skip); } } } @@ -1605,9 +1609,20 @@ public void mouseReleased(MouseEvent e) { popup.show(this, e.getX(), e.getY()); } workspace.getMiniMap().repaint(); + + drag = 0; } + int drag = 0; + public void mouseDragged(MouseEvent e) { + mouseDragged(e, true); + } + + public void mouseDragged(MouseEvent e, boolean skip) { + + drag++; + if (SwingUtilities.isLeftMouseButton(e)) { if (pickedUp) { Point pp = SwingUtilities.convertPoint(this, e.getPoint(), workspace.getMiniMap()); @@ -1644,7 +1659,7 @@ public void mouseDragged(MouseEvent e) { //NOTIFY WORKSPACE LISTENERS OF DISCONNECTION workspace.notifyListeners(new WorkspaceEvent(workspace, widget, link, WorkspaceEvent.BLOCKS_DISCONNECTED)); } - startDragging(this, widget); + startDragging(this, widget, skip && drag == 1); } // drag this block and all attached to it diff --git a/src/main/java/edu/mit/blocks/workspace/Page.java b/src/main/java/edu/mit/blocks/workspace/Page.java index cf25f04..82b022b 100644 --- a/src/main/java/edu/mit/blocks/workspace/Page.java +++ b/src/main/java/edu/mit/blocks/workspace/Page.java @@ -1195,6 +1195,7 @@ public void paintComponent(Graphics g) { /** @overrides RBParent.addToBlockLayer() */ @Override public void addToBlockLayer(Component c) { + this.remove(c); this.add(c, BLOCK_LAYER); } From 01f86a1493873a21edf746863067a300fdadb2b3 Mon Sep 17 00:00:00 2001 From: "laurent.schall" Date: Fri, 24 Mar 2017 15:46:15 +0100 Subject: [PATCH 5/6] packaging 5 --- .../blocks/codeblocks/CompilerException.java | 19 ++++++-------- .../mit/blocks/codeblockutil/GlassCard.java | 20 +++++++++++--- .../blocks/codeblockutil/GlassExplorer.java | 26 ++++++++++++++++--- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/src/main/java/edu/mit/blocks/codeblocks/CompilerException.java b/src/main/java/edu/mit/blocks/codeblocks/CompilerException.java index 5821e2a..0f597f5 100644 --- a/src/main/java/edu/mit/blocks/codeblocks/CompilerException.java +++ b/src/main/java/edu/mit/blocks/codeblocks/CompilerException.java @@ -6,7 +6,7 @@ public class CompilerException extends Exception { private static final long serialVersionUID = 1L; - public enum Error { + enum Error { UNSUPPORTED_VALUE } @@ -23,15 +23,12 @@ public CompilerException(Error error, Workspace workspace, Long illegalBlockID) } public String getMessage() { - StringBuilder ans = new StringBuilder(USE_DEBUGGING_MESSAGES ? "Block " + illegalBlockID + " " + label + ": " : ""); - switch (error) { - case UNSUPPORTED_VALUE: - ans.append("Unsupported value."); - break; - default: - ans.append("Unknown error"); - } - - return ans.toString(); + StringBuilder ans = new StringBuilder(USE_DEBUGGING_MESSAGES ? "Block " + illegalBlockID + " " + label + ": " : ""); + if (error.name().equals(Error.UNSUPPORTED_VALUE.name())) { + ans.append("Unsupported value."); + } else { + ans.append("Unknown error"); + } + return ans.toString(); } } diff --git a/src/main/java/edu/mit/blocks/codeblockutil/GlassCard.java b/src/main/java/edu/mit/blocks/codeblockutil/GlassCard.java index d032573..a1398eb 100644 --- a/src/main/java/edu/mit/blocks/codeblockutil/GlassCard.java +++ b/src/main/java/edu/mit/blocks/codeblockutil/GlassCard.java @@ -47,11 +47,16 @@ public class GlassCard implements ActionListener, PropertyChangeListener { /** the canvas that is wrapped by this card */ private Canvas canvas; /** The button of this */ - private CButton button; + public GlassButton button; /** The scroll that canvas lives in */ private CScrollPane scroll; private final static int SCROLLBAR_WIDTH = 18; + + void displayAsSelected(boolean displayAsSelected) { + button.displayAsSelected = displayAsSelected; + } + /** * constructor * @param i @@ -90,7 +95,7 @@ public void actionPerformed(ActionEvent e) { /** * @return the button */ - JComponent getButton() { + CButton getButton() { return button; } @@ -124,6 +129,8 @@ public void propertyChange(PropertyChangeEvent e) { private class GlassButton extends CButton { + boolean displayAsSelected = false; + private static final long serialVersionUID = 328149080429L; //To get the shadow effect the text must be displayed multiple times at //multiple locations. x represents the center, white label. @@ -163,11 +170,16 @@ public void paint(Graphics g) { g2.drawRoundRect(INSET, INSET, buttonWidth, buttonHeight, arc, arc); } else { //paint highlightlayer - if (this.focus) { + if (this.displayAsSelected) { gb.setColor(Color.yellow); - gb.setStroke(new BasicStroke(3)); + gb.setStroke(new BasicStroke(30)); gb.drawRoundRect(INSET, INSET, buttonWidth, buttonHeight, arc, arc); gb.setStroke(new BasicStroke(1)); + } else if (this.focus) { + gb.setColor(Color.yellow); + gb.setStroke(new BasicStroke(3)); + gb.drawRoundRect(INSET, INSET, buttonWidth, buttonHeight, arc, arc); + gb.setStroke(new BasicStroke(1)); } // Paint the first layer gb.setColor(canvas.getColor().darker()); diff --git a/src/main/java/edu/mit/blocks/codeblockutil/GlassExplorer.java b/src/main/java/edu/mit/blocks/codeblockutil/GlassExplorer.java index 45d28ff..c5aeced 100644 --- a/src/main/java/edu/mit/blocks/codeblockutil/GlassExplorer.java +++ b/src/main/java/edu/mit/blocks/codeblockutil/GlassExplorer.java @@ -17,9 +17,12 @@ import java.util.ArrayList; import java.util.List; +import javax.swing.Icon; +import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.Timer; +import javax.swing.UIManager; import edu.mit.blocks.workspace.Workspace; @@ -141,10 +144,16 @@ public void setDrawersCard(List items) { * @param index */ public void selectCanvas(int index) { + + drawers.forEach(card -> card.displayAsSelected(false)); + if ((!timer.timer.isRunning()) || (this.selectedCanvasIndex != index)) { if (index >= 0 && index < drawers.size()) { this.selectedCanvasIndex = index; GlassCard card = drawers.get(index); + + card.displayAsSelected(true); + canvasPane.removeAll(); canvasPane.add(card.getScroll()); canvasPane.setBackground(card.getBackgorundColor()); @@ -183,7 +192,6 @@ public JComponent getJComponent() { * Rolls the canvasPane back underneath when focus is lost */ public void focusLost(FocusEvent e) { - timer.shrink(); } public void focusGained(FocusEvent e) { @@ -204,12 +212,22 @@ private class CanvasPane extends JPanel { private JPanel extraPanel; // border around the extraPanel to leave room for the CanvasPane // decorations like rounded corners and a little blank space. - private Insets insets = new Insets(15, 5, 35, 3); + private Insets insets = new Insets(15 +10/*start after the close button*/, 5, 35, 3); /** * Creates a new CanvasPane */ public CanvasPane() { + + Icon icon = UIManager.getIcon("InternalFrame.closeIcon"); + JButton closeBtn = new JButton("Close", icon); + closeBtn.setOpaque(true); + closeBtn.setBackground(new Color(190, 200, 220)); + closeBtn.addActionListener(e -> { + timer.shrink(); + }); + super.add(closeBtn); + // the extraPanel only exists for sizing reasons. It is invisible. // Without it, when the CanvasPane opens (gets wider), the contents // try to resize themselves. The extraPanel gives the contents @@ -334,7 +352,7 @@ public void actionPerformed(ActionEvent e) { canvasPane.repaint(); } } else { - if (canvasPane.getWidth() > 3) { + if (canvasPane.getWidth() > 3) { canvasPane.setSize(canvasPane.getWidth() / 3, canvasHeight); canvasPane.revalidate(); canvasPane.repaint(); @@ -361,8 +379,10 @@ public void expand() { * Shrinks the canvasPane */ public void shrink() { + drawers.forEach(card -> card.displayAsSelected(false)); this.expand = false; timer.start(); + repaint(); } } } From 3f815aeb0658ced65903443da1492db351bf3fda Mon Sep 17 00:00:00 2001 From: bastadyceline Date: Thu, 7 Mar 2019 10:08:48 +0100 Subject: [PATCH 6/6] Update RenderableBlock Class, to fix the zoomFactor which was not up to date. --- src/main/java/edu/mit/blocks/renderable/RenderableBlock.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java b/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java index 242c466..1f8714b 100644 --- a/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java +++ b/src/main/java/edu/mit/blocks/renderable/RenderableBlock.java @@ -208,6 +208,10 @@ private RenderableBlock(Workspace workspace, WorkspaceWidget parent, Long blockI this.plugTag = new ConnectorTag(getBlock().getPlug()); this.afterTag = new ConnectorTag(getBlock().getAfterConnector()); this.beforeTag = new ConnectorTag(getBlock().getBeforeConnector()); + this.plugTag.setZoomLevel(getZoom()); + this.afterTag.setZoomLevel(getZoom()); + this.beforeTag.setZoomLevel(getZoom()); + this.blockLabel = workspace.getEnv().getBlockLabelBuilder().buildBlockLabel(workspace, blockID); this.pageLabel = new PageLabel(workspace, getBlock().getPageLabel(), BlockLabel.Type.PAGE_LABEL, false, blockID); this.add(pageLabel.getJComponent()); @@ -483,6 +487,7 @@ private boolean synchronizeSockets() { ConnectorTag tag = this.getConnectorTag(socket); if (tag == null) { tag = new ConnectorTag(socket); + tag.setZoomLevel(getZoom()); if (SocketLabel.ignoreSocket(socket)) { tag.setLabel(null); //ignored sockets have no labels } else {