private void traverseFocus(Direction dir) {
   if (isNullBlockInstance(focusManager.getFocusBlockID())) {
     if (dir == Direction.UP) {
       blockCanvas.getVerticalModel().setValue(blockCanvas.getVerticalModel().getValue() - 5);
     } else if (dir == Direction.DOWN) {
       blockCanvas.getVerticalModel().setValue(blockCanvas.getVerticalModel().getValue() + 5);
     } else if (dir == Direction.LEFT) {
       blockCanvas.getHorizontalModel().setValue(blockCanvas.getHorizontalModel().getValue() - 5);
     } else if (dir == Direction.RIGHT) {
       blockCanvas.getHorizontalModel().setValue(blockCanvas.getHorizontalModel().getValue() + 5);
     } else if (dir == Direction.ESCAPE) {
       // according to the focus manager, the canvas already
       // has focus. So, just request focus again.
       this.blockCanvas.getCanvas().requestFocus();
     } else if (dir == Direction.ENTER) {
     }
   } else {
     if (dir == Direction.UP) {
       focusManager.focusBeforeBlock();
     } else if (dir == Direction.DOWN) {
       focusManager.focusAfterBlock();
     } else if (dir == Direction.LEFT) {
       focusManager.focusPrevBlock();
     } else if (dir == Direction.RIGHT) {
       focusManager.focusNextBlock();
     } else if (dir == Direction.ESCAPE) {
       RenderableBlock block =
           workspace.getEnv().getRenderableBlock(focusManager.getFocusBlockID());
       Point location =
           SwingUtilities.convertPoint(block, new Point(0, 0), this.blockCanvas.getCanvas());
       this.focusManager.setFocus(location, Block.NULL);
       this.blockCanvas.getCanvas().requestFocus();
     } else if (dir == Direction.ENTER) {
       workspace
           .getEnv()
           .getRenderableBlock(focusManager.getFocusBlockID())
           .switchToLabelEditingMode(true);
     }
   }
 }