@Override
  public void mouseReleased(MouseEvent e) {
    e.consume();

    // handle marble click
    int releasedRow = table.rowAtPoint(e.getPoint());
    if (releasedRow == mousePressedRow) {
      int totalHeight = 0;
      for (int i = 0; i < releasedRow; i++) totalHeight += table.getRowHeight(i);

      int marbleTop =
          ((JPanel)
                  rowHeader
                      .getCellRenderer()
                      .getListCellRendererComponent(
                          rowHeader, (releasedRow + 1) + "", releasedRow, false, false))
              .getComponent(1)
              .getY();
      if (e.getY() > marbleTop + totalHeight - 4 && e.getY() < marbleTop + totalHeight + 16) {

        GeoCasCell clickedCell = table.getGeoCasCell(table.rowAtPoint(e.getPoint()));
        if (table.isEditing()) {
          table.stopEditing();
        }
        clickedCell.toggleTwinGeoEuclidianVisible();
      }
    }

    mousePressedRow = -1;
    // handle right click

    if (rightClick) {
      if (!rowHeader.isSelectedIndex(releasedRow)) {
        rowHeader.setSelectedIndex(releasedRow);
      }
      if (rowHeader.getSelectedIndices().length > 0) {
        RowHeaderPopupMenu popupMenu = new RowHeaderPopupMenu(rowHeader, table);
        popupMenu.show(e.getComponent(), e.getX(), e.getY());
      }
    }
  }