From 918d46e2e7ba3966f5a5c4cca53731154867695d Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Thu, 24 Sep 2009 12:43:25 +0000
Subject: [PATCH] use popup menu
git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@11897 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
.../artemis/components/alignment/JamView.java | 173 +++++++++---------
1 file changed, 86 insertions(+), 87 deletions(-)
diff --git a/uk/ac/sanger/artemis/components/alignment/JamView.java b/uk/ac/sanger/artemis/components/alignment/JamView.java
index 993a12248..d39984e80 100644
--- a/uk/ac/sanger/artemis/components/alignment/JamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/JamView.java
@@ -26,14 +26,12 @@ package uk.ac.sanger.artemis.components.alignment;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
-import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
+import java.awt.FlowLayout;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
@@ -64,8 +62,11 @@ import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
+import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
+import javax.swing.JComponent;
import javax.swing.JFrame;
+import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
@@ -118,9 +119,9 @@ public class JamView extends JPanel
private Bases bases;
private JScrollPane jspView;
private JComboBox combo;
- private JCheckBox checkBoxSingle;
- private JCheckBox checkBoxSNPs;
- private JCheckBox checkBoxStackView;
+ private boolean isSingle = false;
+ private boolean isSNPs = false;
+ private boolean isStackView = false;
private FeatureDisplay feature_display;
private Selection selection;
@@ -331,7 +332,7 @@ public class JamView extends JPanel
}
}
inputSam.close();
- System.out.println("readFromBamPicard "+start+".."+end);
+ //System.out.println("readFromBamPicard "+start+".."+end);
}
/**
@@ -382,7 +383,7 @@ public class JamView extends JPanel
else
readFromBam(start, end);
- if(!checkBoxStackView.isSelected() || pixPerBase*3 >= ALIGNMENT_PIX_PER_BASE)
+ if(!isStackView || pixPerBase*3 >= ALIGNMENT_PIX_PER_BASE)
Collections.sort(readsInView, new SAMRecordComparator());
setCursor(cdone);
}
@@ -399,7 +400,7 @@ public class JamView extends JPanel
drawBaseAlignment(g2, seqLength, pixPerBase, start, end);
else
{
- if(!checkBoxStackView.isSelected())
+ if(!isStackView)
drawLineView(g2, seqLength, pixPerBase, start, end);
else
drawStackView(g2, seqLength, pixPerBase, start, end);
@@ -568,7 +569,7 @@ public class JamView extends JPanel
xpos = block.getReferenceStart()-1+j;
int refPos = xpos-refSeqStart+1;
- if(checkBoxSNPs.isSelected() && refSeq != null && refPos > 0 && refPos < refSeq.length())
+ if(isSNPs && refSeq != null && refPos > 0 && refPos < refSeq.length())
{
if(readSeq.charAt(readPos) != refSeq.charAt(refPos))
g2.setColor(Color.red);
@@ -611,7 +612,7 @@ public class JamView extends JPanel
if( !samRecord.getReadPairedFlag() || // read is not paired in sequencing
samRecord.getMateUnmappedFlag() ) // mate is unmapped
{
- if(checkBoxSingle.isSelected())
+ if(isSingle)
{
int ypos = (getHeight() - scaleHeight) - samRecord.getReadString().length();
g2.setColor(Color.orange);
@@ -782,7 +783,7 @@ public class JamView extends JPanel
}
drawRead(g2, samRecord, pixPerBase, stroke, ypos);
- if (checkBoxSNPs.isSelected())
+ if (isSNPs)
showSNPsOnReads(g2, samRecord, pixPerBase, ypos);
}
@@ -859,7 +860,7 @@ public class JamView extends JPanel
g2.drawLine((int) (thisStart * pixPerBase), ypos,
(int) (thisEnd * pixPerBase), ypos);
- if (checkBoxSNPs.isSelected())
+ if (isSNPs)
showSNPsOnReads(g2, thisRead, pixPerBase, ypos);
}
@@ -950,19 +951,25 @@ public class JamView extends JPanel
* @param autohide automatically hide the top panel containing the buttons
*/
public void addJamToPanel(final JPanel mainPanel,
+ final JFrame frame,
final boolean autohide,
final FeatureDisplay feature_display)
{
this.mainPanel = mainPanel;
-
+
+
+ final JComponent topPanel;
if(feature_display != null)
{
this.feature_display = feature_display;
this.selection = feature_display.getSelection();
+ topPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 0, 0));
+ }
+ else
+ {
+ topPanel = new JMenuBar();
+ frame.setJMenuBar((JMenuBar)topPanel);
}
-
- final JPanel topPanel = new JPanel(new GridBagLayout());
- GridBagConstraints gc = new GridBagConstraints();
// auto hide top panel
final JCheckBox buttonAutoHide = new JCheckBox("Hide", autohide);
@@ -983,13 +990,12 @@ public class JamView extends JPanel
int y = (int) (e.getY() - jspView.getViewport().getViewRect().getY());
if (y < thisHgt)
{
- if (!containsComponent(topPanel, mainPanel))
- mainPanel.add(topPanel, BorderLayout.NORTH);
+ topPanel.setVisible(true);
}
else
{
- if (buttonAutoHide.isSelected() && containsComponent(topPanel, mainPanel))
- mainPanel.remove(topPanel);
+ if (buttonAutoHide.isSelected())
+ topPanel.setVisible(false);
}
mainPanel.repaint();
mainPanel.revalidate();
@@ -999,7 +1005,6 @@ public class JamView extends JPanel
combo = new JComboBox(seqNames);
combo.setEditable(false);
-
combo.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
@@ -1009,52 +1014,13 @@ public class JamView extends JPanel
setZoomLevel(JamView.this.nbasesInView);
}
});
- gc.fill = GridBagConstraints.NONE;
- gc.anchor = GridBagConstraints.NORTHWEST;
- topPanel.add(combo, gc);
-
- checkBoxSingle = new JCheckBox("Single Reads");
- checkBoxSingle.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- repaint();
- }
- });
- topPanel.add(checkBoxSingle, gc);
-
- checkBoxSNPs = new JCheckBox("SNPs");
- checkBoxSNPs.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- if (checkBoxSNPs.isSelected() && bases == null)
- {
- JOptionPane.showMessageDialog(null,
- "No reference sequence supplied to identify SNPs.", "SNPs",
- JOptionPane.INFORMATION_MESSAGE);
- }
- repaint();
- }
- });
- topPanel.add(checkBoxSNPs, gc);
-
- checkBoxStackView = new JCheckBox("Stack");
- checkBoxStackView.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- laststart = -1;
- lastend = -1;
- repaint();
- }
- });
- topPanel.add(checkBoxStackView, gc);
+ topPanel.add(combo);
if(feature_display == null)
{
- final JTextField baseText = new JTextField(10);
+ final JTextField baseText = new JTextField(8);
JButton goTo = new JButton("GoTo:");
+ goTo.setToolTipText("Go to base position");
goTo.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
@@ -1072,8 +1038,8 @@ public class JamView extends JPanel
}
}
});
- topPanel.add(goTo, gc);
- topPanel.add(baseText, gc);
+ topPanel.add(goTo);
+ topPanel.add(baseText);
JButton zoomIn = new JButton("-");
Insets ins = new Insets(1,1,1,1);
@@ -1087,7 +1053,7 @@ public class JamView extends JPanel
goToBasePosition(startBase);
}
});
- topPanel.add(zoomIn, gc);
+ topPanel.add(zoomIn);
JButton zoomOut = new JButton("+");
zoomOut.setMargin(ins);
@@ -1102,10 +1068,10 @@ public class JamView extends JPanel
goToBasePosition(startBase);
}
});
- topPanel.add(zoomOut, gc);
+ topPanel.add(zoomOut);
}
- topPanel.add(buttonAutoHide, gc);
+ topPanel.add(buttonAutoHide);
mainPanel.setPreferredSize(new Dimension(900, 400));
@@ -1116,7 +1082,8 @@ public class JamView extends JPanel
setDisplay(1, nbasesInView, null);
mainPanel.setLayout(new BorderLayout());
- mainPanel.add(topPanel, BorderLayout.NORTH);
+ if(topPanel instanceof JPanel)
+ mainPanel.add(topPanel, BorderLayout.NORTH);
mainPanel.add(jspView, BorderLayout.CENTER);
jspView.getVerticalScrollBar().setValue(
@@ -1159,21 +1126,48 @@ public class JamView extends JPanel
});
}
- /**
- * Check to see if this component is contained by the display
- * (FeatureDisplay) component.
- * @return
- */
- private boolean containsComponent(JPanel topPanel, JPanel mainPanel)
+ private void createViewMenu(JComponent view)
{
- Component[] c = mainPanel.getComponents();
- for(int i=0; i<c.length; i++)
+ JCheckBoxMenuItem checkBoxSingle = new JCheckBoxMenuItem("Single Reads");
+ checkBoxSingle.addActionListener(new ActionListener()
{
- if(c[i].equals(topPanel))
- return true;
- }
+ public void actionPerformed(ActionEvent e)
+ {
+ repaint();
+ isSingle = !isSingle;
+ }
+ });
+ view.add(checkBoxSingle);
+
+ JCheckBoxMenuItem checkBoxSNPs = new JCheckBoxMenuItem("SNPs");
+ checkBoxSNPs.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ if (isSNPs && bases == null)
+ {
+ JOptionPane.showMessageDialog(null,
+ "No reference sequence supplied to identify SNPs.", "SNPs",
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+ isSNPs = !isSNPs;
+ repaint();
+ }
+ });
+ view.add(checkBoxSNPs);
- return false;
+ JCheckBoxMenuItem checkBoxStackView = new JCheckBoxMenuItem("Stack View");
+ checkBoxStackView.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ laststart = -1;
+ lastend = -1;
+ isStackView = !isStackView;
+ repaint();
+ }
+ });
+ view.add(checkBoxStackView);
}
public void setVisible(boolean visible)
@@ -1207,15 +1201,15 @@ public class JamView extends JPanel
if(pixPerBase*3 > ALIGNMENT_PIX_PER_BASE)
{
pixPerBase = ALIGNMENT_PIX_PER_BASE;
- checkBoxSingle.setVisible(false);
jspView.getVerticalScrollBar().setValue(0);
jspView.setColumnHeaderView(ruler);
showBaseAlignment = true;
}
else if(jspView != null)
{
- checkBoxSingle.setVisible(true);
jspView.setColumnHeaderView(null);
+ jspView.getVerticalScrollBar().setValue(
+ jspView.getVerticalScrollBar().getMaximum());
showBaseAlignment = false;
}
@@ -1273,14 +1267,12 @@ public class JamView extends JPanel
if(pixPerBase*3 > ALIGNMENT_PIX_PER_BASE)
{
pixPerBase = ALIGNMENT_PIX_PER_BASE;
- checkBoxSingle.setVisible(false);
jspView.getVerticalScrollBar().setValue(0);
jspView.setColumnHeaderView(ruler);
showBaseAlignment = true;
}
else if(jspView != null)
{
- checkBoxSingle.setVisible(true);
jspView.setColumnHeaderView(null);
showBaseAlignment = false;
}
@@ -1471,8 +1463,15 @@ public class JamView extends JPanel
private void maybeShowPopup(MouseEvent e)
{
if(e.isPopupTrigger())
+ {
+ if(popup == null)
+ {
+ popup = new JPopupMenu();
+ createViewMenu(popup);
+ }
popup.show(e.getComponent(),
e.getX(), e.getY());
+ }
}
}
@@ -1617,7 +1616,7 @@ public class JamView extends JPanel
public void windowLostFocus(WindowEvent e){}
});
- view.addJamToPanel((JPanel)frame.getContentPane(), false, null);
+ view.addJamToPanel((JPanel)frame.getContentPane(), frame, false, null);
frame.pack();
view.jspView.getVerticalScrollBar().setValue(
--
GitLab