@Override
    public void mouseClicked(MouseEvent e) {
      Object ob = e.getSource();
      if (ob == table) {
        Point origin = e.getPoint();
        org.geogebra.common.awt.GPoint mouseCoords =
            new org.geogebra.common.awt.GPoint(e.getPoint().x, e.getPoint().y);
        int row = table.rowAtPoint(origin);
        if (row < 0) return;

        // right click
        if (AppD.isRightClick(e)) {
          GeoElement geo = ((ConstructionTableData) data).getGeoElement(row);
          ArrayList<GeoElement> temp = new ArrayList<GeoElement>();
          temp.add(geo);
          ((GuiManagerD) app.getGuiManager()).showPopupMenu(temp, table, mouseCoords);
        } else { // left click

          if (e.getClickCount() == 1) {

            // click on breakpoint column?
            int column = table.columnAtPoint(origin);
            String colName = table.getColumnName(column);

            // if (colName.equals("Breakpoint")) {
            if (colName.equals("H")) {
              RowData rd = data.getRow(row);
              GeoElement geo = rd.getGeo();
              boolean newVal = !geo.isConsProtocolBreakpoint();
              geo.setConsProtocolBreakpoint(newVal);

              // update only current row
              rd.updateAll();

              if (kernel.getConstruction().showOnlyBreakpoints() && !newVal) {
                data.remove(geo);
              }

              /*
               * // update geo and all siblings GeoElement []
               * siblings = geo.getSiblings(); if (siblings !=
               * null) { data.updateAll(); } else { // update only
               * current row rd.updateAll(); }
               *
               * // no longer a breakpoint: hide it if
               * (kernel.showOnlyBreakpoints() && !newVal) { if
               * (siblings == null) data.remove(geo); else { for
               * (int i=0; i < siblings.length; i++) {
               * data.remove(siblings[i]); } } }
               */
            }
          }

          // double click
          if (e.getClickCount() == 2) {
            data.setConstructionStepForRow(row);
            table.repaint();
          }
        }
      } else if (ob == table.getTableHeader() && (e.getClickCount() == 2)) {
        setConstructionStep(-1);
        table.repaint();
      } else if ((e.getClickCount() == 1)
          && (AppD.isRightClick(e))
          && ((ob == table.getTableHeader()) || (ob == scrollPane))) {
        ConstructionProtocolContextMenu contextMenu =
            new ConstructionProtocolContextMenu((AppD) app);
        contextMenu.show(view.scrollPane, e.getPoint().x, e.getPoint().y);
      }
    }