public static void convertPointFromScreen(Object display, P3 ptTemp) { Point xyTemp = new Point(); xyTemp.x = (int) ptTemp.x; xyTemp.y = (int) ptTemp.y; SwingUtilities.convertPointFromScreen(xyTemp, (Component) display); ptTemp.set(xyTemp.x, xyTemp.y, Float.NaN); }
public void mouseEntered() { try { loadedMutex.acquire(); if (rootCrowdLoaded) { Point mousePosition = new Point(MouseInfo.getPointerInfo().getLocation()); SwingUtilities.convertPointFromScreen(mousePosition, this); for (int i = 0; i < rootCrowd.getMouseActionList().size(); i++) { // if the mouse click is in the hitbox then peform the action if (rootCrowd.getMouseActionList().get(i).isActive() && rootCrowd .getMouseActionList() .get(i) .isInBounds(mousePosition.x, mousePosition.y)) { rootCrowd.getMouseActionList().get(i).mI(mousePosition); } else if (rootCrowd.getMouseActionList().get(i).isActive() && !rootCrowd .getMouseActionList() .get(i) .isInBounds(mousePosition.x, mousePosition.y)) { rootCrowd.getMouseActionList().get(i).mO(mousePosition); } } } loadedMutex.release(); } catch (InterruptedException ie) { System.err.println("interrupedMouseEnter"); Thread.currentThread().interrupt(); } }
private static void dispatchEvent(JComponent component, MouseEvent event) { if (component != null && event != null) { Point point = event.getLocationOnScreen(); SwingUtilities.convertPointFromScreen(point, component); component.dispatchEvent(MouseEventAdapter.convert(event, component, point.x, point.y)); } }
public void mouseReleased(MouseEvent e) { Point mousePosition = new Point(MouseInfo.getPointerInfo().getLocation()); SwingUtilities.convertPointFromScreen(mousePosition, this); // Mouse 1 if (e.getButton() == MouseEvent.BUTTON1) { L_MOUSE_DOWN = false; for (int i = 0; i < rootCrowd.getMouseActionList().size(); i++) { // if the mouse click is in the hitbox then peform the action if (rootCrowd.getMouseActionList().get(i).isActive() && rootCrowd.getMouseActionList().get(i).isInBounds(mousePosition.x, mousePosition.y)) { if (rootCrowd.getMouseActionList().get(i).mU(mousePosition, e)) return; } } } // Mouse 2, BUTTON2 is middle mouse else if (e.getButton() == MouseEvent.BUTTON3) { for (int i = 0; i < rootCrowd.getMouseActionList().size(); i++) { // if the mouse click is in the hitbox then peform the action if (rootCrowd.getMouseActionList().get(i).isActive() && rootCrowd.getMouseActionList().get(i).isInBounds(mousePosition.x, mousePosition.y)) { if (rootCrowd.getMouseActionList().get(i).rMU(mousePosition, e)) return; } } } }
@Override public void mouseDragged(MouseEvent arg0) { if (dragging) { setDragTileLocation(new Point(arg0.getXOnScreen(), arg0.getYOnScreen())); // find drop target on world Point os = new Point(arg0.getXOnScreen(), arg0.getYOnScreen()); SwingUtilities.convertPointFromScreen(os, parent.world); Component component = SwingUtilities.getDeepestComponentAt(parent.world, (int) os.getX(), (int) os.getY()); if (component instanceof TileView) { // available drop target reached draggedOverTile = ((TileView) component); // change cursor symbol to drop target symbol Cursor cursor = DragSource.DefaultCopyDrop; draggedTile.setCursor(cursor); } else { draggedOverTile = null; // reset cursor symbol draggedTile.setCursor(null); } } }
private void repaintBadge(JComponent field) { Point p = field.getLocationOnScreen(); SwingUtilities.convertPointFromScreen(p, this); int x = p.x - warningIcon.getWidth() / 2; int y = (int) (p.y + field.getHeight() - warningIcon.getHeight() / 1.5); repaint(x, y, warningIcon.getWidth(), warningIcon.getHeight()); }
/** * Compute the bounds in which the user can move the mouse without the tip window disappearing. */ private void computeTipVisibleBounds() { // Compute area that the mouse can move in without hiding the // tip window. Note that Java 1.4 can only detect mouse events // in Java windows, not globally. Rectangle r = tipWindow.getBounds(); Point p = r.getLocation(); SwingUtilities.convertPointFromScreen(p, textArea); r.setLocation(p); tipVisibleBounds.setBounds(r.x, r.y - 15, r.width, r.height + 15 * 2); }
public void mouseDragged(MouseEvent e) { Component c = e.getComponent(); Point p = (Point) e.getPoint().clone(); SwingUtilities.convertPointToScreen(p, c); SwingUtilities.convertPointFromScreen(p, glassPane); glassPane.setPoint(p); glassPane.repaint(); }
private Point2D convertPoint(double centreX, double centreY, double width, double height) { // Step 1: screen coordinates to panel coordinates Point p = new Point((int) centreX, (int) centreY); SwingUtilities.convertPointFromScreen(p, this); // Step 2: we have the middle, we need the top left double topLeftX = p.x - (width / 2); double topLeftY = p.y - (height / 2); return new Point2D.Double(topLeftX, topLeftY); }
/** * Creates a new JInternalFrame based on the contents of an existing JFrame * * @param f the JFrame that will be used to create the JInternalFrame * @param desktop the JDesktopPane that will receive the JInternalFrame, if null it only retunrs * the internal frame * @return a new JInternalFrame */ public JInternalFrame transformToInternalFrame(JFrame f, JDesktopPane desktop) { JInternalFrame jif = new JInternalFrame(f.getTitle(), true, true, true, true); if (f.getIconImage() != null) jif.setFrameIcon(new ImageIcon(f.getIconImage())); if (desktop != null) desktop.add(jif); jif.setSize(f.getSize()); jif.setContentPane(f.getContentPane()); if (desktop != null) SwingUtilities.convertPointFromScreen(f.getLocation(), desktop); jif.setLocation(new Point(0, 0)); jif.setBounds(f.getBounds()); f.dispose(); jif.setVisible(true); return (jif); }
public static Point convertPoint( final Component source, final int x, final int y, final Component destination) { Point convertedPoint = new Point(x, y); if (source != null && destination != null) { convertPointToScreen(convertedPoint, source); convertPointFromScreen(convertedPoint, destination); } else { translateRelatedPoint(convertedPoint, source, 1, true); translateRelatedPoint(convertedPoint, destination, -1, true); } return convertedPoint; }
/** * Returns the component in the currently selected path which contains sourcePoint. * * @param source The component in whose coordinate space sourcePoint is given * @param sourcePoint The point which is being tested * @return The component in the currently selected path which contains sourcePoint (relative to * the source component's coordinate space. If sourcePoint is not inside a component on the * currently selected path, null is returned. */ public Component componentForPoint(Component source, Point sourcePoint) { int screenX, screenY; Point p = sourcePoint; int i, c, j, d; Component mc; Rectangle r2; int cWidth, cHeight; MenuElement menuElement; MenuElement subElements[]; Vector<MenuElement> tmp; int selectionSize; SwingUtilities.convertPointToScreen(p, source); screenX = p.x; screenY = p.y; tmp = (Vector<MenuElement>) selection.clone(); selectionSize = tmp.size(); for (i = selectionSize - 1; i >= 0; i--) { menuElement = (MenuElement) tmp.elementAt(i); subElements = menuElement.getSubElements(); for (j = 0, d = subElements.length; j < d; j++) { if (subElements[j] == null) continue; mc = subElements[j].getComponent(); if (!mc.isShowing()) continue; if (mc instanceof JComponent) { cWidth = mc.getWidth(); cHeight = mc.getHeight(); } else { r2 = mc.getBounds(); cWidth = r2.width; cHeight = r2.height; } p.x = screenX; p.y = screenY; SwingUtilities.convertPointFromScreen(p, mc); /** * Return the deepest component on the selection path in whose bounds the event's point * occurs */ if (p.x >= 0 && p.x < cWidth && p.y >= 0 && p.y < cHeight) { return mc; } } } return null; }
@Override public void mouseReleased(MouseEvent e) { Component c = e.getComponent(); Point p = (Point) e.getPoint().clone(); SwingUtilities.convertPointToScreen(p, c); Point eventPoint = (Point) p.clone(); SwingUtilities.convertPointFromScreen(p, glassPane); glassPane.setPoint(p); glassPane.setVisible(false); glassPane.setImage(null); fireGhostDropEvent(new GhostDropEvent(action, eventPoint, this.component, null)); }
protected static void processMagnification(IdeFrame frame, double magnification) { Point mouse = MouseInfo.getPointerInfo().getLocation(); SwingUtilities.convertPointFromScreen(mouse, frame.getComponent()); Component componentAt = SwingUtilities.getDeepestComponentAt(frame.getComponent(), mouse.x, mouse.y); if (componentAt != null) { Editor editor = PlatformDataKeys.EDITOR.getData(DataManager.getInstance().getDataContext(componentAt)); if (editor != null) { double currentSize = editor.getColorsScheme().getEditorFontSize(); int defaultFontSize = EditorColorsManager.getInstance().getGlobalScheme().getEditorFontSize(); ((EditorEx) editor) .setFontSize((int) (Math.max(currentSize + magnification * 3, defaultFontSize))); } } }
public Point getLocationOn(JComponent c) { Point location; if (isRealPopup()) { location = myPopup.getLocationOnScreen(); SwingUtilities.convertPointFromScreen(location, c); } else { if (myCurrentIdeTooltip != null) { Point tipPoint = myCurrentIdeTooltip.getPoint(); Component tipComponent = myCurrentIdeTooltip.getComponent(); return SwingUtilities.convertPoint(tipComponent, tipPoint, c); } else { location = SwingUtilities.convertPoint(myComponent.getParent(), myComponent.getLocation(), c); } } return location; }
@Override public void mousePressed(MouseEvent e) { Component c = e.getComponent(); BufferedImage image = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics g = image.getGraphics(); c.paint(g); glassPane.setVisible(true); Point p = (Point) e.getPoint().clone(); SwingUtilities.convertPointToScreen(p, c); SwingUtilities.convertPointFromScreen(p, glassPane); glassPane.setPoint(p); glassPane.setImage(image); glassPane.repaint(); }
@Override protected void paintComponent(Graphics g) { for (JComponent invalid : invalidFields) { if (invalid.getParent() instanceof JViewport) { JViewport viewport = (JViewport) invalid.getParent(); // the parent of the viewport is a JScrollPane invalid = (JComponent) viewport.getParent(); } Point p = invalid.getLocationOnScreen(); SwingUtilities.convertPointFromScreen(p, this); int x = p.x - warningIcon.getWidth() / 2; int y = (int) (p.y + invalid.getHeight() - warningIcon.getHeight() / 1.5); if (g.getClipBounds().intersects(x, y, warningIcon.getWidth(), warningIcon.getHeight())) { g.drawImage(warningIcon, x, y, null); } } }
public void setVisible(boolean visible) { if (!visible && myView != null) { disposeAndUpdate(false); } else if (visible && myView == null) { Window owner = UIUtil.getWindow(myOwner); if (owner != null) { if (myHeavyWeight) { Window view = pop(owner); if (view == null) { view = new JWindow(owner); setPopupType(view); } setAlwaysOnTop(view, myAlwaysOnTop); setWindowFocusable(view, myWindowFocusable); setWindowShadow(view, myWindowShadow); myView = view; } else if (owner instanceof RootPaneContainer) { JLayeredPane parent = ((RootPaneContainer) owner).getLayeredPane(); if (parent != null) { JPanel view = new JPanel(new BorderLayout()); view.setVisible(false); parent.add(view, JLayeredPane.POPUP_LAYER, 0); myView = view; } } } if (myView != null) { myView.add(myContent); Component parent = myView instanceof Window ? null : myView.getParent(); if (parent != null) { Point location = myViewBounds.getLocation(); SwingUtilities.convertPointFromScreen(location, parent); myViewBounds.setLocation(location); } myView.setBackground(UIUtil.getLabelBackground()); myView.setBounds(myViewBounds); myView.setVisible(true); myViewBounds = null; } } }
/** @param event */ private void showTooltipWindow(MouseEvent event) { Point p = new Point(event.getPoint()); SwingUtilities.convertPointToScreen(p, this); Point p2 = new Point(p); SwingUtilities.convertPointFromScreen(p2, textComponent); // annotation for target line AnnotateLine al = null; if (!elementAnnotations.isEmpty()) { al = getAnnotateLine(getLineFromMouseEvent(event)); } /** * al.getCommitMessage() != null - since commit messages are initialized separately from the AL * constructor */ if (al != null && al.getCommitMessage() != null) { TooltipWindow ttw = new TooltipWindow(this, al); ttw.show(new Point(p.x - p2.x, p.y)); } }
private void setBounds(Point location, Dimension size) { if (myView != null) { if (size == null) { size = myView.getSize(); } if (location == null) { location = myView.getLocation(); } else { Component parent = myView instanceof Window ? null : myView.getParent(); if (parent != null) { SwingUtilities.convertPointFromScreen(location, parent); } } myView.setBounds(location.x, location.y, size.width, size.height); if (myView.isVisible()) { myView.invalidate(); myView.validate(); myView.repaint(); } } }
/** * Prepares to move or drop a figure on this board. * * @param x the x-coordinate of the mouse * @param y the y-coordinate of the mouse * @param figure the figure which is grabbed * @return <code>true</code> if a valid location for <code>figure</code> was found, <code>false * </code> otherwise */ private StationDropOperation prepare(int x, int y, ChessFigure figure) { Point location = new Point(x, y); SwingUtilities.convertPointFromScreen(location, this); int w = getWidth(); int h = getHeight(); if (location.x < 0 || location.y < 0 || location.x > w || location.y > h) { return null; } int r = -1; int c = 7; while (c * w / 8 > location.x) c--; while ((7 - r) * h / 8 > location.y) r++; final DropInfo drop = new DropInfo(); figure .getFigure() .reachable( new Board.CellVisitor() { public boolean visit(int r, int c, Figure figure) { drop.targets[r][c] = true; return true; } }); drop.figure = figure; drop.row = r; drop.column = c; drop.valid = drop.targets[drop.row][drop.column]; return drop; }
public static void feedMouseEventToPanel(int x, int y) { Point p = new Point(x, y); SwingUtilities.convertPointFromScreen(p, frame.getContentPane()); System.out.println("x " + x + " y " + y); System.out.println("p.x " + p.x + " p.y " + p.y); if ((p.x > 0 && p.x < frame.getWidth()) && (p.y > 0 && p.y < frame.getHeight())) { Component comp = SwingUtilities.getDeepestComponentAt(frame.getContentPane(), p.x, p.y); System.out.println(comp.toString()); Toolkit.getDefaultToolkit() .getSystemEventQueue() .postEvent(new MouseEvent(comp, MouseEvent.MOUSE_PRESSED, 0, 0, p.x, p.y, 1, false)); Toolkit.getDefaultToolkit() .getSystemEventQueue() .postEvent(new MouseEvent(comp, MouseEvent.MOUSE_RELEASED, 0, 0, p.x, p.y, 1, false)); Toolkit.getDefaultToolkit() .getSystemEventQueue() .postEvent(new MouseEvent(comp, MouseEvent.MOUSE_CLICKED, 0, 0, p.x, p.y, 1, false)); } }
/** * When a MenuElement receives an event from a MouseListener, it should never process the event * directly. Instead all MenuElements should call this method with the event. * * @param event a MouseEvent object */ public void processMouseEvent(MouseEvent event) { int screenX, screenY; Point p; int i, c, j, d; Component mc; Rectangle r2; int cWidth, cHeight; MenuElement menuElement; MenuElement subElements[]; MenuElement path[]; Vector<MenuElement> tmp; int selectionSize; p = event.getPoint(); Component source = event.getComponent(); if ((source != null) && !source.isShowing()) { // This can happen if a mouseReleased removes the // containing component -- bug 4146684 return; } int type = event.getID(); int modifiers = event.getModifiers(); // 4188027: drag enter/exit added in JDK 1.1.7A, JDK1.2 if ((type == MouseEvent.MOUSE_ENTERED || type == MouseEvent.MOUSE_EXITED) && ((modifiers & (InputEvent.BUTTON1_MASK | InputEvent.BUTTON2_MASK | InputEvent.BUTTON3_MASK)) != 0)) { return; } if (source != null) { SwingUtilities.convertPointToScreen(p, source); } screenX = p.x; screenY = p.y; tmp = (Vector<MenuElement>) selection.clone(); selectionSize = tmp.size(); boolean success = false; for (i = selectionSize - 1; i >= 0 && success == false; i--) { menuElement = (MenuElement) tmp.elementAt(i); subElements = menuElement.getSubElements(); path = null; for (j = 0, d = subElements.length; j < d && success == false; j++) { if (subElements[j] == null) continue; mc = subElements[j].getComponent(); if (!mc.isShowing()) continue; if (mc instanceof JComponent) { cWidth = mc.getWidth(); cHeight = mc.getHeight(); } else { r2 = mc.getBounds(); cWidth = r2.width; cHeight = r2.height; } p.x = screenX; p.y = screenY; SwingUtilities.convertPointFromScreen(p, mc); /** * Send the event to visible menu element if menu element currently in the selected path or * contains the event location */ if ((p.x >= 0 && p.x < cWidth && p.y >= 0 && p.y < cHeight)) { int k; if (path == null) { path = new MenuElement[i + 2]; for (k = 0; k <= i; k++) path[k] = (MenuElement) tmp.elementAt(k); } path[i + 1] = subElements[j]; MenuElement currentSelection[] = getSelectedPath(); // Enter/exit detection -- needs tuning... if (currentSelection[currentSelection.length - 1] != path[i + 1] && (currentSelection.length < 2 || currentSelection[currentSelection.length - 2] != path[i + 1])) { Component oldMC = currentSelection[currentSelection.length - 1].getComponent(); MouseEvent exitEvent = new MouseEvent( oldMC, MouseEvent.MOUSE_EXITED, event.getWhen(), event.getModifiers(), p.x, p.y, event.getXOnScreen(), event.getYOnScreen(), event.getClickCount(), event.isPopupTrigger(), MouseEvent.NOBUTTON); currentSelection[currentSelection.length - 1].processMouseEvent(exitEvent, path, this); MouseEvent enterEvent = new MouseEvent( mc, MouseEvent.MOUSE_ENTERED, event.getWhen(), event.getModifiers(), p.x, p.y, event.getXOnScreen(), event.getYOnScreen(), event.getClickCount(), event.isPopupTrigger(), MouseEvent.NOBUTTON); subElements[j].processMouseEvent(enterEvent, path, this); } MouseEvent mouseEvent = new MouseEvent( mc, event.getID(), event.getWhen(), event.getModifiers(), p.x, p.y, event.getXOnScreen(), event.getYOnScreen(), event.getClickCount(), event.isPopupTrigger(), MouseEvent.NOBUTTON); subElements[j].processMouseEvent(mouseEvent, path, this); success = true; event.consume(); } } } }
/** * Searches the dock where the dockable will be docked for the current mouse location. A rectangle * is painted that shows, where the dockable will be docked. The cursor shows, if we can dock, or * if we cannot dock for the current location. */ public void drag(MouseEvent mouseEvent) { // Get the component of the mouse event. Component mouseComponent = (Component) mouseEvent.getSource(); // Get the mouse location in screen coordinates. computeScreenLocation(mouseEvent); // Do we have to move an externalized dockable? if (draggedDockable.getState() == DockableState.EXTERNALIZED) { // Move the dockable. ExternalizedDraggerSupport.moveExternalizedDockable( draggedDockable, screenLocation, dockableOffset); return; } // Get the destination dock for this position for the dockable that we are dragging. Dock[] destinationDocks = dockRetriever.retrieveHighestPriorityDock(screenLocation, draggedDockable); if (destinationDocks == null) { // We have no destination dock any more. Clean up what was painted before. clearPainting(); // Set the 'cannot dock' cursor. cursorManager.setCursor(mouseComponent, retrieveCanNotDockCursor()); return; } Dock destinationDock = destinationDocks[0]; // Do we have a destination dock? if (destinationDock != null) { // Does the destination dock inherit from java.awt.Component or is it the float dock? if (destinationDock instanceof Component) { // Get the docking rectangle for the destination dock. locationInDestinationDock.setLocation(screenLocation.x, screenLocation.y); SwingUtilities.convertPointFromScreen( locationInDestinationDock, (Component) destinationDock); destinationDock.retrieveDockingRectangle( draggedDockable, locationInDestinationDock, dockableOffset, dockableDragRectangle); // Paint the new rectangle. dockableDragPainter.paintDockableDrag( draggedDockable, destinationDock, dockableDragRectangle, locationInDestinationDock); // Set the 'can dock' cursor. cursorManager.setCursor((Component) destinationDock, retrieveCanDockCursor()); } else if (destinationDock instanceof FloatDock) { // Are we in the special situation that we will move a child dock of the float dock? boolean move = false; // Get the root dock and the dock under the root. Dock rootDock = originDock; Dock dockUnderRoot = null; while (rootDock.getParentDock() != null) { dockUnderRoot = rootDock; rootDock = rootDock.getParentDock(); } // Is the root dock the float dock? if (rootDock instanceof FloatDock) { // Is the dockable already in this dock and are there no others? List childrenOfDockable = new ArrayList(); List childrenOfDock = new ArrayList(); DockingUtil.retrieveDockables(draggedDockable, childrenOfDockable); DockingUtil.retrieveDockables(dockUnderRoot, childrenOfDock); if (sameElements(childrenOfDockable, childrenOfDock)) { move = true; } } // We cannot paint on the screen, but maybe we can paint in the pane of the origin dock. if (originDock instanceof Component) { if (move) { locationInDestinationDock.setLocation( screenLocation.x - dockableOffset.x, screenLocation.y - dockableOffset.y); SwingUtilities.convertPointFromScreen( locationInDestinationDock, (Component) originDock); dockableDragRectangle.setLocation(locationInDestinationDock); Window window = SwingUtilities.getWindowAncestor((Component) dockUnderRoot); dockableDragRectangle.setSize(window.getSize()); locationInDestinationDock.setLocation( locationInDestinationDock.x + dockableOffset.x, locationInDestinationDock.y + dockableOffset.y); } else { // Get the docking rectangle for the destination float dock. destinationDock.retrieveDockingRectangle( draggedDockable, screenLocation, dockableOffset, dockableDragRectangle); // Convert this rectangle to the origindock. locationInDestinationDock.setLocation(dockableDragRectangle.x, dockableDragRectangle.y); SwingUtilities.convertPointFromScreen( locationInDestinationDock, (Component) originDock); dockableDragRectangle.setLocation(locationInDestinationDock); locationInDestinationDock.setLocation( locationInDestinationDock.x + dockableOffset.x, locationInDestinationDock.y + dockableOffset.y); } // Paint the new rectangle. dockableDragPainter.paintDockableDrag( draggedDockable, originDock, dockableDragRectangle, locationInDestinationDock); } else { // We couldn't find a dock where we can paint. clearPainting(); } // Set the 'can dock' cursor. cursorManager.setCursor(mouseComponent, retrieveCanDockCursor()); } else { // Currentle this should not happen. All docks, except the float dock inherit from // java.awt.Component. // We have a dock where we cannot paint. Clean up what was painted before. clearPainting(); // Set the 'can dock' cursor. cursorManager.setCursor(mouseComponent, retrieveCanDockCursor()); } } else { // We have no destination dock any more. Clean up what was paintedbefore. clearPainting(); // Set the 'cannot dock' cursor. cursorManager.setCursor(mouseComponent, retrieveCanNotDockCursor()); } }
/** * Resets the cursor. Cleans up what was painted before. Searches a destination dock for the last * mouse location and tries to dock the dragged dockable in this dock. */ public void stopDragging(MouseEvent mouseEvent) { // Reset the old cursor. cursorManager.resetCursor(); // Clean up what was painted for dragging. dockableDragPainter.clear(); // Get the mouse location in screen coordinates. computeScreenLocation(mouseEvent); // Do we have to move an externalized dockable? if (draggedDockable.getState() == DockableState.EXTERNALIZED) { // Move the dockable. ExternalizedDraggerSupport.moveExternalizedDockable( draggedDockable, screenLocation, dockableOffset); // No dragging anymore. reset(); return; } // Get the destination dock. Dock[] destinationDocks = dockRetriever.retrieveHighestPriorityDock(screenLocation, draggedDockable); if (destinationDocks == null) { return; } Dock destinationDock = destinationDocks[0]; // Is the destination dock different from the origin? if (destinationDock != null) { if (!destinationDock.equals(originDock)) { // Get the mouse location for the new dock. locationInDestinationDock.setLocation(screenLocation.x, screenLocation.y); if (destinationDock instanceof Component) { SwingUtilities.convertPointFromScreen( locationInDestinationDock, (Component) destinationDock); } // Check if we can move the dock of the dockable in the float dock. if (destinationDock instanceof FloatDock) { // Get the root dock and the dock under the root. Dock rootDock = originDock; Dock dockUnderRoot = null; while (rootDock.getParentDock() != null) { dockUnderRoot = rootDock; rootDock = rootDock.getParentDock(); } // Is the root dock the float dock? if (rootDock instanceof FloatDock) { // Is the dockable already in this dock and are there no others? List childrenOfDockable = new ArrayList(); List childrenOfDock = new ArrayList(); DockingUtil.retrieveDockables(draggedDockable, childrenOfDockable); DockingUtil.retrieveDockables(dockUnderRoot, childrenOfDock); if (sameElements(childrenOfDockable, childrenOfDock)) { ((FloatDock) rootDock) .moveDock(dockUnderRoot, locationInDestinationDock, dockableOffset); return; } } } // Get the real dockable in the model with this ID. Dockable dockableWrapper = DockingUtil.retrieveDockableOfDockModel(draggedDockable.getID()); if (dockableWrapper == null) { throw new IllegalStateException( "The dragged dockable should be docked in the dock model."); } // Remove the dockable from the old dock, add to the new dock. // Use the docking manager for the addition and removal, because the listenenrs have to // informed. if (!originDock.equals(draggedDockable.getDock())) { throw new IllegalStateException("The origin dock is not the parent of the dockable."); } DockingManager.getDockingExecutor() .changeDocking( dockableWrapper, destinationDock, locationInDestinationDock, dockableOffset); // Clean the dock from which the dockable is removed. DockingManager.getDockingExecutor().cleanDock(originDock, false); } else { // Get the real dockable in the model with this ID. Dockable dockableWrapper = DockingUtil.retrieveDockableOfDockModel(draggedDockable.getID()); if (dockableWrapper == null) { throw new IllegalStateException( "The dragged dockable should be docked in the dock model."); } // Move the dockable to a new position in the same dock. if (!originDock.equals(draggedDockable.getDock())) { throw new IllegalStateException("The origin dock is not the parent of the dockable."); } DockingManager.getDockingExecutor() .changeDocking(dockableWrapper, originDock, locationInDestinationDock, new Point(0, 0)); } } // No dragging anymore. reset(); }
/** * Get an instance of a {@link JPopupMenu} for a given {@link VPathwayElement} * * @param e The {@link VPathwayElement} to create the popup menu for. If e is an instance of * {@link Handle}, the menu is based on the parent element. * @return The {@link JPopupMenu} for the given pathway element */ private JPopupMenu getMenuInstance(SwingEngine swingEngine, VPathwayElement e) { if (e instanceof Citation) return null; JMenu pathLitRef = null; if (e instanceof Handle) { e = ((Handle) e).getParent(); pathLitRef = new JMenu("Literature for pathway"); } VPathway vp = e.getDrawing(); VPathwaySwing component = (VPathwaySwing) vp.getWrapper(); ViewActions vActions = vp.getViewActions(); JPopupMenu menu = new JPopupMenu(); // Don't show delete if the element cannot be deleted if (!(e instanceof InfoBox)) { menu.add(vActions.delete1); } JMenu selectMenu = new JMenu("Select"); selectMenu.add(vActions.selectAll); selectMenu.add(vActions.selectDataNodes); selectMenu.add(vActions.selectInteractions); selectMenu.add(vActions.selectLines); selectMenu.add(vActions.selectShapes); selectMenu.add(vActions.selectLabels); menu.add(selectMenu); menu.addSeparator(); // new feature to copy and paste with the right-click menu menu.add(vActions.copy); PositionPasteAction a = vActions.positionPaste; Point loc = MouseInfo.getPointerInfo().getLocation(); SwingUtilities.convertPointFromScreen(loc, component); a.setPosition(loc); menu.add(a); menu.addSeparator(); // Only show group/ungroup when multiple objects or a group are selected if ((e instanceof Group)) { GroupStyle s = ((Group) e).getPathwayElement().getGroupStyle(); if (s == GroupStyle.GROUP) { menu.add(vActions.toggleGroup); } else { menu.add(vActions.toggleComplex); } menu.addSeparator(); } else if (vp.getSelectedGraphics().size() > 1) { menu.add(vActions.toggleGroup); menu.add(vActions.toggleComplex); } if (e instanceof GeneProduct) { menu.add(vActions.addState); } if (e instanceof State) { menu.add(vActions.removeState); } if ((e instanceof Line)) { final Line line = (Line) e; menu.add(vActions.addAnchor); if (line.getPathwayElement().getConnectorType() == ConnectorType.SEGMENTED) { menu.add(vActions.addWaypoint); menu.add(vActions.removeWaypoint); } JMenu typeMenu = new JMenu("Line type"); ButtonGroup buttons = new ButtonGroup(); ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { line.getPathwayElement() .setConnectorType(ConnectorType.fromName(e.getActionCommand())); } }; for (ConnectorType t : ConnectorType.getValues()) { JRadioButtonMenuItem mi = new JRadioButtonMenuItem(t.getName()); mi.setActionCommand(t.getName()); mi.setSelected(t.equals(line.getPathwayElement().getConnectorType())); mi.addActionListener(listener); typeMenu.add(mi); buttons.add(mi); } menu.add(typeMenu); } if ((e instanceof VAnchor)) { final VAnchor anchor = ((VAnchor) e); JMenu anchorMenu = new JMenu("Anchor type"); ButtonGroup buttons = new ButtonGroup(); ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { anchor.getMAnchor().setShape(AnchorType.fromName(e.getActionCommand())); } }; for (AnchorType at : AnchorType.getValues()) { JRadioButtonMenuItem mi = new JRadioButtonMenuItem(at.getName()); mi.setActionCommand(at.getName()); mi.setSelected(at.equals(anchor.getMAnchor().getShape())); mi.addActionListener(listener); anchorMenu.add(mi); buttons.add(mi); } menu.add(anchorMenu); } JMenu orderMenu = new JMenu("Order"); orderMenu.add(vActions.orderBringToFront); orderMenu.add(vActions.orderSendToBack); orderMenu.add(vActions.orderUp); orderMenu.add(vActions.orderDown); menu.add(orderMenu); if (e instanceof Graphics) { JMenu litMenu = new JMenu("Literature"); litMenu.add(new AddLiteratureAction(swingEngine, component, e)); litMenu.add(new EditLiteratureAction(swingEngine, component, e)); menu.add(litMenu); menu.addSeparator(); menu.add(new PropertiesAction(swingEngine, component, e)); } if (pathLitRef != null) { menu.addSeparator(); pathLitRef.add( new AddLiteratureAction( swingEngine, component, swingEngine.getEngine().getActiveVPathway().getMappInfo())); pathLitRef.add( new EditLiteratureAction( swingEngine, component, swingEngine.getEngine().getActiveVPathway().getMappInfo())); menu.add(pathLitRef); } // give plug-ins a chance to add menu items. for (PathwayElementMenuHook hook : hooks) { hook.pathwayElementMenuHook(e, menu); } return menu; }