From 40bd4b8d08c9022848c9b7c606f7798f35f367e7 Mon Sep 17 00:00:00 2001 From: Mike Date: Sat, 19 Aug 2023 11:48:43 +0100 Subject: [PATCH] Add right click copy and paste menu --- .../convex/gui/components/RightCopyMenu.java | 62 +++++++++++++++++++ .../gui/manager/windows/peer/REPLPanel.java | 3 + 2 files changed, 65 insertions(+) create mode 100644 convex-gui/src/main/java/convex/gui/components/RightCopyMenu.java diff --git a/convex-gui/src/main/java/convex/gui/components/RightCopyMenu.java b/convex-gui/src/main/java/convex/gui/components/RightCopyMenu.java new file mode 100644 index 000000000..fe825bb70 --- /dev/null +++ b/convex-gui/src/main/java/convex/gui/components/RightCopyMenu.java @@ -0,0 +1,62 @@ +package convex.gui.components; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.text.JTextComponent; + +@SuppressWarnings("serial") +public class RightCopyMenu extends JPopupMenu implements ActionListener { + + JMenuItem copyMenuItem = new JMenuItem("Copy"); + JMenuItem cutMenuItem = new JMenuItem("Cut"); + JMenuItem pasteMenuItem = new JMenuItem("Paste"); + + public RightCopyMenu(Component invoker) { + copyMenuItem.addActionListener(this); + cutMenuItem.addActionListener(this); + pasteMenuItem.addActionListener(this); + + add(copyMenuItem); + add(cutMenuItem); + add(pasteMenuItem); + + setInvoker(invoker); + } + + public static void addTo(JTextComponent tf) { + tf.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent e) { + switch(e.getButton()) { + case MouseEvent.BUTTON3: { + Component comp=e.getComponent(); + RightCopyMenu menu=new RightCopyMenu(comp); + menu.show(comp, e.getX(), e.getY()); + break; + } + } + } + }); + } + + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); + Component invoker=getInvoker(); + if (invoker instanceof JTextComponent) { + JTextComponent tf = (JTextComponent)invoker; + if (source == cutMenuItem) { + tf.cut(); + } else if (source == copyMenuItem) { + tf.copy(); + } else if (source == pasteMenuItem) { + tf.paste(); + } + } + } +} diff --git a/convex-gui/src/main/java/convex/gui/manager/windows/peer/REPLPanel.java b/convex-gui/src/main/java/convex/gui/manager/windows/peer/REPLPanel.java index 594dde0d1..ed054e221 100644 --- a/convex-gui/src/main/java/convex/gui/manager/windows/peer/REPLPanel.java +++ b/convex-gui/src/main/java/convex/gui/manager/windows/peer/REPLPanel.java @@ -40,6 +40,7 @@ import convex.core.transactions.Invoke; import convex.gui.components.AccountChooserPanel; import convex.gui.components.ActionPanel; +import convex.gui.components.RightCopyMenu; @SuppressWarnings("serial") public class REPLPanel extends JPanel { @@ -112,6 +113,7 @@ public REPLPanel(Convex convex) { outputArea.setEditable(false); outputArea.setLineWrap(true); outputArea.setFont(new Font("Monospaced", Font.PLAIN, 16)); + RightCopyMenu.addTo(outputArea); //outputArea.setForeground(Color.GREEN); //DefaultCaret caret = (DefaultCaret)(outputArea.getCaret()); //caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); @@ -122,6 +124,7 @@ public REPLPanel(Convex convex) { inputArea.setFont(new Font("Monospaced", Font.PLAIN, 20)); inputArea.getDocument().addDocumentListener(inputListener); inputArea.addKeyListener(inputListener); + RightCopyMenu.addTo(inputArea); //inputArea.setForeground(Color.GREEN); splitPane.setRightComponent(new JScrollPane(inputArea));