public void updateCursor(DrawingView view, Point p) { if (view.isEnabled()) { Handle handle = view.findHandle(p); if (handle != null) { view.setCursor(handle.getCursor()); } else { Figure figure = view.findFigure(p); Point2D.Double point = view.viewToDrawing(p); Drawing drawing = view.getDrawing(); while (figure != null && !figure.isSelectable()) { figure = drawing.findFigureBehind(point, figure); } if (figure != null) { view.setCursor(figure.getCursor(view.viewToDrawing(p))); } else { view.setCursor(Cursor.getDefaultCursor()); } } } else { view.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); } }
@Override public void propertyChange(PropertyChangeEvent evt) { String name = evt.getPropertyName(); if (name == DrawingEditor.ACTIVE_VIEW_PROPERTY) { if (view != null) { view.removePropertyChangeListener(this); view.removeFigureSelectionListener(this); } view = (DrawingView) evt.getNewValue(); if (view != null) { view.addPropertyChangeListener(this); view.addFigureSelectionListener(this); } updateVisibility(); } else if (name == DrawingEditor.TOOL_PROPERTY) { updateVisibility(); } }
@Override public void setTool(Tool newValue) { Tool oldValue = tool; if (newValue == tool) { return; } if (tool != null) { for (DrawingView v : views) { v.removeMouseListener(tool); v.removeMouseMotionListener(tool); v.removeKeyListener(tool); } tool.deactivate(this); tool.removeToolListener(toolHandler); } tool = newValue; if (tool != null) { tool.activate(this); for (DrawingView v : views) { v.addMouseListener(tool); v.addMouseMotionListener(tool); v.addKeyListener(tool); } tool.addToolListener(toolHandler); } firePropertyChange(TOOL_PROPERTY, oldValue, newValue); }
@Override public void add(DrawingView view) { views.add(view); view.addNotify(this); view.getComponent().addFocusListener(focusHandler); if (tool != null) { view.addMouseListener(tool); view.addMouseMotionListener(tool); view.addKeyListener(tool); } updateActiveView(); }
/** * Hook method which can be overriden by subclasses to provide * specialised behaviour in the event of a multi-click. */ protected void handleMultiClick(MouseEvent evt) { if (DEBUG) { System.out.println("DelegationSelectionTool.handleMultiClick " + evt); } DrawingView v = getView(); Point pos = new Point(evt.getX(), evt.getY()); Handle handle = v.findHandle(pos); if (handle == null) { v.setHandleDetailLevel(v.getHandleDetailLevel() + 1); } }
@Override public void mousePressed(MouseEvent evt) { if (getView() != null && getView().isEnabled()) { super.mousePressed(evt); DrawingView view = getView(); Handle handle = view.findHandle(anchor); Tool newTracker = null; if (handle != null) { } else { Figure figure; Drawing drawing = view.getDrawing(); Point2D.Double p = view.viewToDrawing(anchor); if (isSelectBehindEnabled() && (evt.getModifiersEx() & (InputEvent.ALT_DOWN_MASK | InputEvent.CTRL_DOWN_MASK)) != 0) { figure = view.findFigure(anchor); while (figure != null && !figure.isSelectable()) { figure = drawing.findFigureBehind(p, figure); HashSet<Figure> ignoredFigures = new HashSet<Figure>(view.getSelectedFigures()); ignoredFigures.add(figure); Figure figureBehind = view.getDrawing().findFigureBehind( view.viewToDrawing(anchor), ignoredFigures); if (figureBehind != null) { figure = figureBehind; for (Figure f : view.getSelectedFigures()) { if (f.contains(p)) {
protected boolean maybeSwitchTool(final MouseEvent event) { if (activeTool != null && activeTool.isConstructing()) return false; anchor = new Point(event.getX(), event.getY()); JHotDrawTool tool = creationTool; final DrawingView view = getView(); if (view != null && view.isEnabled()) { if (view.findHandle(anchor) != null || (view.findFigure(anchor) != null && view.findFigure(anchor) .isSelectable())) { tool = selectionTool; } } if (activeTool != tool) { if (activeTool != null) { activeTool.deactivate(getEditor()); } if (tool != null) { tool.activate(getEditor()); if (!isActive()) { tool.deactivate(getEditor()); } } activeTool = tool; return true; } return false; } }
Handle handle = v.findHandle(pos); if (handle != null) { if (DEBUG) { for (Figure f : v.getSelectedFigures()) { if (f.contains(p)) { figure = f; figure = v.findFigure(pos); } else { if (outerFigure.handleMouseClick(p, evt, getView())) { v.clearSelection(); v.addToSelection(outerFigure); } else { v.clearSelection(); v.addToSelection(outerFigure); v.setHandleDetailLevel(v.getHandleDetailLevel() + 1);
@Override public void mouseDragged(MouseEvent e) { DrawingView v = getView(); Figure f = v.findFigure(e.getPoint()); if (f != null) { if (!v.getSelectedFigures().contains(f)) { v.clearSelection(); v.addToSelection(f); } v.getComponent().getTransferHandler().exportAsDrag(v.getComponent(), e, DnDConstants.ACTION_MOVE); } fireToolDone(); }
@Override public void keyTyped(KeyEvent evt) { if (getView() != null && getView().isEnabled()) { tracker.keyTyped(evt); } }
@Override public void mouseMoved(MouseEvent evt) { clearRubberBand(); Point point = evt.getPoint(); DrawingView view = editor.findView((Container) evt.getSource()); updateCursor(view, point); if (view == null || editor.getActiveView() != view) { clearHoverHandles(); } else { // Search first, if one of the selected figures contains // the current mouse location, and is selectable. // Only then search for other // figures. This search sequence is consistent with the // search sequence of the SelectionTool. Figure figure = null; Point2D.Double p = view.viewToDrawing(point); for (Figure f : view.getSelectedFigures()) { if (f.contains(p)) { figure = f; } } if (figure == null) { figure = view.findFigure(point); while (figure != null && !figure.isSelectable()) { figure = view.getDrawing().findFigureBehind(p, figure); } } updateHoverHandles(view, figure); } }
@Override public String getToolTipText(DrawingView view, MouseEvent evt) { Handle handle = view.findHandle(evt.getPoint()); if (handle != null) { return handle.getToolTipText(evt.getPoint()); } Figure figure = view.findFigure(evt.getPoint()); if (figure != null) { return figure.getToolTipText(viewToDrawing(evt.getPoint())); } return null; } }
Figure f = view.findFigure(me.getPoint()); if (view.getSelectedFigures().contains(f)) { transferFigures.addAll(view.getSelectedFigures()); } else { transferFigures.add(f); Rectangle viewArea = view.drawingToView(drawingArea); Point imageOffset = me.getPoint(); imageOffset.x = viewArea.x - imageOffset.x;
@Override public void updateEnabledState() { if (getView() != null) { setEnabled(getView().isEnabled() && getView().getSelectionCount() > 1 ); } else { setEnabled(false); } } @Override
public SelectionComponentRepainter(DrawingEditor editor, JComponent component) { this.editor = editor; this.component = component; if (editor != null) { if (editor.getActiveView() != null) { DrawingView view = editor.getActiveView(); view.addPropertyChangeListener(this); view.addFigureSelectionListener(this); if (view.getDrawing() != null) { view.getDrawing().addFigureListener(this); } } editor.addPropertyChangeListener(this); } }
/** * Hook method which can be overriden by subclasses to provide * specialised behaviour in the event of a popup trigger. */ protected void handlePopupMenu(MouseEvent evt) { Point p = new Point(evt.getX(), evt.getY()); Figure figure = getView().findFigure(p); if (figure != null || drawingActions.size() > 0) { showPopupMenu(figure, p, evt.getComponent()); } else { popupMenu = null; } }
DrawingView view = (DrawingView) evt.getOldValue(); if (view != null) { view.removePropertyChangeListener(this); if (view.getDrawing() != null) { view.getDrawing().removeFigureListener(this); view.addPropertyChangeListener(this); if (view.getDrawing() != null) { view.getDrawing().addFigureListener(this);
gridSizeField.setFormatterFactory(JavaNumberFormatter.createFormatterFactory(0d, 1000d, 1d, true)); gridSizeField.setHorizontalAlignment(JTextField.LEADING); final GridConstrainer constrainer = (GridConstrainer) view.getVisibleConstrainer(); gridSizeField.addPropertyChangeListener(new PropertyChangeListener() { scaleFactorField.setFormatterFactory(new DefaultFormatterFactory(formatter)); scaleFactorField.setHorizontalAlignment(JTextField.LEADING); scaleFactorField.setValue(view.getScaleFactor()); scaleFactorField.addPropertyChangeListener(new PropertyChangeListener() { view.addPropertyChangeListener(new PropertyChangeListener() {
/** Registers the event handler from the drawing editor and the * active drawing view. */ private void registerEventHandler() { if (specificView != null) { specificView.addPropertyChangeListener(eventHandler); } else { if (editor != null) { editor.addPropertyChangeListener(new WeakPropertyChangeListener(eventHandler)); if (activeView != null) { activeView.removePropertyChangeListener(eventHandler); } activeView = editor.getActiveView(); if (activeView != null) { activeView.addPropertyChangeListener(eventHandler); } } } } }