+ /*
+ * defer right-mouse click handling to mouse up on Windows
+ * (where isPopupTrigger() will answer true)
+ * but accept Cmd-click on Mac which passes isRightMouseButton
+ */
+ return;
+ }
+ leftMouseButtonPressed(evt, res);
+ }
+
+ /**
+ * Handles right mouse button press. If pressed in a selected column, opens
+ * context menu for 'Hide Columns'. If pressed on a hidden columns marker,
+ * opens context menu for 'Reveal / Reveal All'. Else does nothing.
+ *
+ * @param evt
+ * @param res
+ */
+ protected void rightMouseButtonPressed(MouseEvent evt, final int res)
+ {
+ JPopupMenu pop = buildPopupMenu(res);
+ if (pop.getSubElements().length > 0)
+ {
+ pop.show(this, evt.getX(), evt.getY());
+ }
+ }
+
+ /**
+ * Builds a popup menu with 'Hide' or 'Reveal' options, or both, or neither
+ *
+ * @param res
+ * column number (0..)
+ * @return
+ */
+ protected JPopupMenu buildPopupMenu(final int res)
+ {
+ JPopupMenu pop = new JPopupMenu();
+
+ /*
+ * logic here depends on 'reveal', set in mouseMoved;
+ * grab the hidden range in case mouseMoved nulls it later
+ */
+ final int[] hiddenRange = reveal;
+ if (hiddenRange != null)
+ {
+ JMenuItem item = new JMenuItem(
+ MessageManager.getString("label.reveal"));
+ item.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ av.showColumn(hiddenRange[0]);
+ reveal = null;
+ ap.updateLayout();
+ ap.paintAlignment(true, true);
+ av.sendSelection();
+ }
+ });
+ pop.add(item);
+
+ if (av.getAlignment().getHiddenColumns().hasMultiHiddenColumnRegions())