@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); } }