From 9e1602b1c91bc875c7e806e1ebc7541139b8cf8e Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 31 May 2022 03:07:04 +0200 Subject: [PATCH] Implement right-click popup in rocket view --- .../sf/openrocket/gui/main/BasicFrame.java | 2 +- .../gui/scalefigure/RocketPanel.java | 24 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index 242916e44..a79560033 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -911,7 +911,7 @@ public class BasicFrame extends JFrame { this.setJMenuBar(menubar); } - protected void doComponentTreePopup(MouseEvent e) { + public void doComponentTreePopup(MouseEvent e) { popupMenu.show(e.getComponent(), e.getX(), e.getY()); } diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index 551944835..750a251dc 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -510,16 +510,24 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change public static final int CYCLE_SELECTION_MODIFIER = InputEvent.SHIFT_DOWN_MASK; private void handleMouseClick(MouseEvent event) { - if (event.getButton() != MouseEvent.BUTTON1) - return; - Point p0 = event.getPoint(); - Point p1 = scrollPane.getViewport().getViewPosition(); - int x = p0.x + p1.x; - int y = p0.y + p1.y; + if (event.getButton() == MouseEvent.BUTTON1) { + // Get the component that is clicked on + Point p0 = event.getPoint(); + Point p1 = scrollPane.getViewport().getViewPosition(); + int x = p0.x + p1.x; + int y = p0.y + p1.y; - RocketComponent[] clicked = figure.getComponentsByPoint(x, y); + RocketComponent[] clicked = figure.getComponentsByPoint(x, y); - handleComponentClick(clicked, event); + handleComponentClick(clicked, event); + } else if (event.getButton() == MouseEvent.BUTTON3) { + List selectedComponents = Arrays.stream(selectionModel.getSelectionPaths()) + .map(c -> (RocketComponent) c.getLastPathComponent()).collect(Collectors.toList()); + + if (selectedComponents.size() == 0) return; + + basicFrame.doComponentTreePopup(event); + } } private void handleComponentClick(RocketComponent[] clicked, MouseEvent event) {