protected void processMousePressedEvent(MouseEvent e) {

    requestFocusInWindow();

    int ex = e.getX();
    int ey = e.getY();
    Image image = null;
    float w;
    Insets insets = getInsets();
    int x = insets.left;
    int n = SnapshotGallery.sharedInstance().size();
    for (int i = n - 1; i >= 0; i--) {
      image = SnapshotGallery.sharedInstance().getThumbnail(i);
      w = image.getWidth(this);
      if (ex > x && ex < x + w && ey > insets.top && ey < insets.top + IMAGE_HEIGHT) {
        SnapshotGallery.sharedInstance().setSelectedIndex(i);
        repaint();
        break;
      }
      if (getLayout() instanceof FlowLayout) {
        x += (int) w + ((FlowLayout) getLayout()).getHgap();
      } else {
        x += (int) w + IMAGE_GAP;
      }
    }

    if (draggable) {
      if (!ModelerUtilities.isRightClick(e) && e.getClickCount() < 2) {
        JComponent c = (JComponent) e.getSource();
        TransferHandler handler = c.getTransferHandler();
        handler.exportAsDrag(c, e, TransferHandler.COPY);
      }
    } else {
      if (!ModelerUtilities.isRightClick(e) && e.getClickCount() >= 2)
        SnapshotGallery.sharedInstance().invokeSnapshotEditor(this, true, true);
    }
  }