// tell EuclidianView public void mouseMoved(AbstractEvent e) { if (view.isEditing()) return; int x = e.getX(); int y = e.getY(); GeoElement geo = view.getGeoElementForLocation(view, x, y); // tell EuclidianView to handle mouse over // EuclidianView ev = app.getEuclidianView(); EuclidianViewInterfaceCommon ev = app.getActiveEuclidianView(); ev.mouseMovedOver(geo); if (geo != null) { app.setTooltipFlag(); // FIXMEview.setToolTipText(geo.getLongDescriptionHTML(true, true)); app.clearTooltipFlag(); } // FIXMEelse // FIXMEview.setToolTipText(null); }
public void mouseClicked(AbstractEvent e) { // right click is consumed in mousePressed, but in GeoGebra 3D, // where heavyweight popup menus are enabled this doesn't work // so make sure that this is no right click as well (ticket #302) if ( /*e.isConsumed() FIXME||*/ e.isRightClick()) { return; } // get GeoElement at mouse location Object tp = view.getPathForLocation(e.getX(), e.getY()); GeoElement geo = view.getGeoElementForPath(tp); // check if we clicked on the 16x16 show/hide icon if (geo != null) { GRectangle rect = (GRectangle) view.getPathBounds(tp); boolean iconClicked = rect != null && e.getX() - rect.getX() < 16; // distance from left border if (iconClicked) { // icon clicked: toggle show/hide geo.setEuclidianVisible(!geo.isSetEuclidianVisible()); geo.updateVisualStyle(); app.storeUndoInfo(); kernel.notifyRepaint(); return; } } // check double click int clicks = e.getClickCount(); // EuclidianView ev = app.getEuclidianView(); EuclidianViewInterfaceCommon ev = app.getActiveEuclidianView(); if (clicks == 2) { app.clearSelectedGeos(); ev.resetMode(); if (geo != null && !e.isControlDown()) { view.startEditing(geo, e.isShiftDown()); } return; } int mode = ev.getMode(); if (!skipSelection && (mode == EuclidianConstants.MODE_MOVE || mode == EuclidianConstants.MODE_RECORD_TO_SPREADSHEET)) { // update selection if (geo == null) { app.clearSelectedGeos(); } else { // handle selecting geo if (e.isControlDown()) { app.toggleSelectedGeo(geo); if (app.getSelectedGeos().contains(geo)) lastSelectedGeo = geo; } else if (e.isShiftDown() && lastSelectedGeo != null) { boolean nowSelecting = true; boolean selecting = false; boolean aux = geo.isAuxiliaryObject(); boolean ind = geo.isIndependent(); boolean aux2 = lastSelectedGeo.isAuxiliaryObject(); boolean ind2 = lastSelectedGeo.isIndependent(); if ((aux == aux2 && aux) || (aux == aux2 && ind == ind2)) { Iterator<GeoElement> it = kernel.getConstruction().getGeoSetLabelOrder().iterator(); boolean direction = geo.getLabel(StringTemplate.defaultTemplate) .compareTo(lastSelectedGeo.getLabel(StringTemplate.defaultTemplate)) < 0; while (it.hasNext()) { GeoElement geo2 = it.next(); if ((geo2.isAuxiliaryObject() == aux && aux) || (geo2.isAuxiliaryObject() == aux && geo2.isIndependent() == ind)) { if (direction && geo2.equals(lastSelectedGeo)) selecting = !selecting; if (!direction && geo2.equals(geo)) selecting = !selecting; if (selecting) { app.toggleSelectedGeo(geo2); nowSelecting = app.getSelectedGeos().contains(geo2); } if (!direction && geo2.equals(lastSelectedGeo)) selecting = !selecting; if (direction && geo2.equals(geo)) selecting = !selecting; } } } if (nowSelecting) { app.addSelectedGeo(geo); lastSelectedGeo = geo; } else { app.removeSelectedGeo(lastSelectedGeo); lastSelectedGeo = null; } } else { app.clearSelectedGeos(false); // repaint will be done next step app.addSelectedGeo(geo); lastSelectedGeo = geo; } } } else if (mode != EuclidianConstants.MODE_SELECTION_LISTENER) { // let euclidianView know about the click AbstractEvent event = e; ev.clickedGeo(geo, event); event.release(); } else // tell selection listener about click app.geoElementSelected(geo, false); // Alt click: copy definition to input field if (geo != null && e.isAltDown() && app.showAlgebraInput()) { // F3 key: copy definition to input bar app.getGlobalKeyDispatcher().handleFunctionKeyForAlgebraInput(3, geo); } ev.mouseMovedOver(null); }
public void mousePressed(AbstractEvent e) { view.cancelEditing(); boolean rightClick = app.isRightClickEnabled() && e.isRightClick(); // RIGHT CLICK if (rightClick) { /*e.consume(); FIXME*/ // get GeoElement at mouse location Object tp = view.getPathForLocation(e.getX(), e.getY()); GeoElement geo = view.getGeoElementForPath(tp); if (geo != null && !app.containsSelectedGeo(geo)) { app.clearSelectedGeos(); } // single selection: popup menu if (app.selectedGeosSize() < 2) { /* if(geo == null) { AlgebraContextMenu contextMenu = new AlgebraContextMenu(app); contextMenu.show(view, e.getPoint().x, e.getPoint().y); } else { ArrayList<GeoElement> temp = new ArrayList<GeoElement>(); temp.add(geo); app.getGuiManager().showPopupMenu(temp, view, mouseCoords); } */ } // multiple selection: popup menu (several geos) else { if (geo != null) { // app.getGuiManager().showPopupMenu(app.getSelectedGeos(), view, mouseCoords); } } // LEFT CLICK } else { // When a single, new selection is made with no key modifiers // we need to handle selection in mousePressed, not mouseClicked. // By doing this selection early, a DnD drag will come afterwards // and grab the new selection. // All other selection types must be handled later in mouseClicked. // In this case a DnD drag starts first and grabs the previously selected // geos (e.g. cntrl-selected or EV selected) as the user expects. skipSelection = false; // flag to prevent duplicate selection in MouseClicked Object tp = view.getPathForLocation(e.getX(), e.getY()); GeoElement geo = view.getGeoElementForPath(tp); EuclidianViewInterfaceCommon ev = app.getActiveEuclidianView(); int mode = ev.getMode(); if ((mode == EuclidianConstants.MODE_MOVE || mode == EuclidianConstants.MODE_SELECTION_LISTENER) && !e.isControlDown() && !e.isShiftDown() && geo != null && !app.containsSelectedGeo(geo)) { app.clearSelectedGeos(false); // repaint will be done next step app.addSelectedGeo(geo); lastSelectedGeo = geo; skipSelection = true; } } }