@Override
  protected void processMouseEvent(final MouseEvent e){
    if (e.getID() == MouseEvent.MOUSE_PRESSED) {
      myStartPoint = e.getPoint();
      myEditor.getDragLayer().add(myRectangePainter);
    }
    else if (e.getID() == MouseEvent.MOUSE_DRAGGED) {
      final Rectangle rectangle = getRectangle(e);
      myRectangePainter.setBounds(rectangle);
      myEditor.getDragLayer().repaint();
    }
    else if (e.getID() == MouseEvent.MOUSE_RELEASED) {
      final Rectangle rectangle = getRectangle(e);
      if (e.isShiftDown() && rectangle.width <= 3 && rectangle.height <= 3) {
        RadComponent component = FormEditingUtil.getRadComponentAt(myEditor.getRootContainer(), e.getX(), e.getY());
        if (component != null) {
          RadComponent anchor = myEditor.getSelectionAnchor();
          if (anchor == null || anchor.getParent() != component.getParent() || anchor.getParent() == null || !anchor.getParent().getLayoutManager().isGrid()) {
            component.setSelected(!component.isSelected());
          }
          else {
            selectComponentsInRange(component, anchor);
            myEditor.setSelectionLead(component);
          }
        }
      }
      markRectangle(myEditor.getRootContainer(), rectangle, e.getComponent());
      final JComponent dragLayer = myEditor.getDragLayer();
      dragLayer.remove(myRectangePainter);
      dragLayer.repaint();
      myStartPoint = null;
    }
  }
@Override
  protected void processMouseEvent(final MouseEvent e)