X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2FMCview%2FPDBCanvas.java;h=a34e574b263dfba179cfbf0be476b62bbb1f6cc6;hb=e94c33abc7983e947f64803ab294282a236bf671;hp=6f76a25397c214875393eb0c69ccd1fd9cce8cc8;hpb=be32c14cd8e48fe0a207cd7030cb9cd46f894678;p=jalview.git diff --git a/src/MCview/PDBCanvas.java b/src/MCview/PDBCanvas.java index 6f76a25..a34e574 100644 --- a/src/MCview/PDBCanvas.java +++ b/src/MCview/PDBCanvas.java @@ -26,6 +26,9 @@ import jalview.datamodel.SequenceI; import jalview.gui.AlignmentPanel; import jalview.gui.FeatureRenderer; import jalview.gui.SequenceRenderer; +import jalview.io.DataSourceType; +import jalview.io.StructureFile; +import jalview.renderer.seqfeatures.FeatureColourFinder; import jalview.structure.AtomSpec; import jalview.structure.StructureListener; import jalview.structure.StructureMapping; @@ -33,8 +36,7 @@ import jalview.structure.StructureSelectionManager; import java.awt.Color; import java.awt.Dimension; -import java.awt.Event; -import java.awt.Font; +import java.awt.event.InputEvent;import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; // JBPNote TODO: This class is quite noisy - needs proper log.info/log.debug @@ -52,8 +54,8 @@ import java.util.Vector; import javax.swing.JPanel; import javax.swing.ToolTipManager; -public class PDBCanvas extends JPanel implements MouseListener, - MouseMotionListener, StructureListener +public class PDBCanvas extends JPanel + implements MouseListener, MouseMotionListener, StructureListener { boolean redrawneeded = true; @@ -65,7 +67,7 @@ public class PDBCanvas extends JPanel implements MouseListener, int my = 0; - public PDBfile pdb; + public StructureFile pdb; PDBEntry pdbentry; @@ -123,7 +125,7 @@ public class PDBCanvas extends JPanel implements MouseListener, PDBChain mainchain; - Vector highlightRes; + Vector highlightRes; boolean pdbAction = false; @@ -140,7 +142,7 @@ public class PDBCanvas extends JPanel implements MouseListener, String errorMessage; void init(PDBEntry pdbentry, SequenceI[] seq, String[] chains, - AlignmentPanel ap, String protocol) + AlignmentPanel ap, DataSourceType protocol) { this.ap = ap; this.pdbentry = pdbentry; @@ -150,11 +152,12 @@ public class PDBCanvas extends JPanel implements MouseListener, try { - pdb = ssm.setMapping(seq, chains, pdbentry.getFile(), protocol); + pdb = ssm.setMapping(seq, chains, pdbentry.getFile(), protocol, + ap.alignFrame); - if (protocol.equals(jalview.io.AppletFormatAdapter.PASTE)) + if (protocol.equals(jalview.io.DataSourceType.PASTE)) { - pdbentry.setFile("INLINE" + pdb.id); + pdbentry.setFile("INLINE" + pdb.getId()); } } catch (Exception ex) @@ -168,13 +171,13 @@ public class PDBCanvas extends JPanel implements MouseListener, errorMessage = "Error loading file: " + pdbentry.getId(); return; } - pdbentry.setId(pdb.id); + pdbentry.setId(pdb.getId()); ssm.addStructureViewerListener(this); colourBySequence(); - int max = -10; + float max = -10; int maxchain = -1; int pdbstart = 0; int pdbend = 0; @@ -184,30 +187,31 @@ public class PDBCanvas extends JPanel implements MouseListener, // JUST DEAL WITH ONE SEQUENCE FOR NOW SequenceI sequence = seq[0]; - for (int i = 0; i < pdb.chains.size(); i++) + for (int i = 0; i < pdb.getChains().size(); i++) { mappingDetails.append("\n\nPDB Sequence is :\nSequence = " - + pdb.chains.elementAt(i).sequence + + pdb.getChains().elementAt(i).sequence .getSequenceAsString()); mappingDetails.append("\nNo of residues = " - + pdb.chains.elementAt(i).residues.size() - + "\n\n"); + + pdb.getChains().elementAt(i).residues.size() + "\n\n"); // Now lets compare the sequences to get // the start and end points. // Align the sequence to the pdb AlignSeq as = new AlignSeq(sequence, - pdb.chains.elementAt(i).sequence, "pep"); + pdb.getChains().elementAt(i).sequence, "pep"); as.calcScoreMatrix(); as.traceAlignment(); PrintStream ps = new PrintStream(System.out) { + @Override public void print(String x) { mappingDetails.append(x); } + @Override public void println() { mappingDetails.append("\n"); @@ -231,7 +235,7 @@ public class PDBCanvas extends JPanel implements MouseListener, mappingDetails.append("\nSEQ start/end " + seqstart + " " + seqend); } - mainchain = pdb.chains.elementAt(maxchain); + mainchain = pdb.getChains().elementAt(maxchain); mainchain.pdbstart = pdbstart; mainchain.pdbend = pdbend; @@ -247,6 +251,7 @@ public class PDBCanvas extends JPanel implements MouseListener, addKeyListener(new KeyAdapter() { + @Override public void keyPressed(KeyEvent evt) { keyPressed(evt); @@ -265,23 +270,21 @@ public class PDBCanvas extends JPanel implements MouseListener, ToolTipManager.sharedInstance().setDismissDelay(10000); } - Vector visiblebonds; + Vector visiblebonds; void setupBonds() { seqColoursReady = false; // Sort the bonds by z coord - visiblebonds = new Vector(); + visiblebonds = new Vector(); - for (int ii = 0; ii < pdb.chains.size(); ii++) + for (PDBChain chain : pdb.getChains()) { - if (pdb.chains.elementAt(ii).isVisible) + if (chain.isVisible) { - Vector tmp = pdb.chains.elementAt(ii).bonds; - - for (int i = 0; i < tmp.size(); i++) + for (Bond bond : chain.bonds) { - visiblebonds.addElement(tmp.elementAt(i)); + visiblebonds.addElement(bond); } } } @@ -305,16 +308,12 @@ public class PDBCanvas extends JPanel implements MouseListener, min[1] = (float) 1e30; min[2] = (float) 1e30; - for (int ii = 0; ii < pdb.chains.size(); ii++) + for (PDBChain chain : pdb.getChains()) { - if (pdb.chains.elementAt(ii).isVisible) + if (chain.isVisible) { - Vector bonds = pdb.chains.elementAt(ii).bonds; - - for (int i = 0; i < bonds.size(); i++) + for (Bond tmp : chain.bonds) { - Bond tmp = (Bond) bonds.elementAt(i); - if (tmp.start[0] >= max[0]) { max[0] = tmp.start[0]; @@ -440,24 +439,17 @@ public class PDBCanvas extends JPanel implements MouseListener, int bsize = 0; // Find centre coordinate - for (int ii = 0; ii < pdb.chains.size(); ii++) + for (PDBChain chain : pdb.getChains()) { - if (pdb.chains.elementAt(ii).isVisible) + if (chain.isVisible) { - Vector bonds = pdb.chains.elementAt(ii).bonds; - - bsize += bonds.size(); + bsize += chain.bonds.size(); - for (int i = 0; i < bonds.size(); i++) + for (Bond bond : chain.bonds) { - xtot = xtot + ((Bond) bonds.elementAt(i)).start[0] - + ((Bond) bonds.elementAt(i)).end[0]; - - ytot = ytot + ((Bond) bonds.elementAt(i)).start[1] - + ((Bond) bonds.elementAt(i)).end[1]; - - ztot = ztot + ((Bond) bonds.elementAt(i)).start[2] - + ((Bond) bonds.elementAt(i)).end[2]; + xtot = xtot + bond.start[0] + bond.end[0]; + ytot = ytot + bond.start[1] + bond.end[1]; + ztot = ztot + bond.start[2] + bond.end[2]; } } } @@ -467,6 +459,7 @@ public class PDBCanvas extends JPanel implements MouseListener, centre[2] = ztot / (2 * (float) bsize); } + @Override public void paintComponent(Graphics g) { super.paintComponent(g); @@ -553,16 +546,17 @@ public class PDBCanvas extends JPanel implements MouseListener, showFeatures = true; } + FeatureColourFinder finder = new FeatureColourFinder(fr); PDBChain chain; if (bysequence && pdb != null) { - for (int ii = 0; ii < pdb.chains.size(); ii++) + for (int ii = 0; ii < pdb.getChains().size(); ii++) { - chain = pdb.chains.elementAt(ii); + chain = pdb.getChains().elementAt(ii); for (int i = 0; i < chain.bonds.size(); i++) { - Bond tmp = (Bond) chain.bonds.elementAt(i); + Bond tmp = chain.bonds.elementAt(i); tmp.startCol = Color.lightGray; tmp.endCol = Color.lightGray; if (chain != mainchain) @@ -580,23 +574,15 @@ public class PDBCanvas extends JPanel implements MouseListener, if (pos > 0) { pos = sequence[s].findIndex(pos); - tmp.startCol = sr.getResidueBoxColour(sequence[s], pos); - if (showFeatures) - { - tmp.startCol = fr.findFeatureColour(tmp.startCol, - sequence[s], pos); - } + tmp.startCol = sr.getResidueColour(sequence[s], pos, + finder); } pos = mapping[m].getSeqPos(tmp.at2.resNumber) - 1; if (pos > 0) { pos = sequence[s].findIndex(pos); - tmp.endCol = sr.getResidueBoxColour(sequence[s], pos); - if (showFeatures) - { - tmp.endCol = fr.findFeatureColour(tmp.endCol, - sequence[s], pos); - } + tmp.endCol = sr.getResidueColour(sequence[s], pos, + finder); } } @@ -618,19 +604,23 @@ public class PDBCanvas extends JPanel implements MouseListener, zsort = new Zsort(); } - zsort.Zsort(visiblebonds); + zsort.sort(visiblebonds); } Bond tmpBond = null; for (int i = 0; i < visiblebonds.size(); i++) { - tmpBond = (Bond) visiblebonds.elementAt(i); + tmpBond = visiblebonds.elementAt(i); - xstart = (int) (((tmpBond.start[0] - centre[0]) * scale) + (getWidth() / 2)); - ystart = (int) (((centre[1] - tmpBond.start[1]) * scale) + (getHeight() / 2)); + xstart = (int) (((tmpBond.start[0] - centre[0]) * scale) + + (getWidth() / 2)); + ystart = (int) (((centre[1] - tmpBond.start[1]) * scale) + + (getHeight() / 2)); - xend = (int) (((tmpBond.end[0] - centre[0]) * scale) + (getWidth() / 2)); - yend = (int) (((centre[1] - tmpBond.end[1]) * scale) + (getHeight() / 2)); + xend = (int) (((tmpBond.end[0] - centre[0]) * scale) + + (getWidth() / 2)); + yend = (int) (((centre[1] - tmpBond.end[1]) * scale) + + (getHeight() / 2)); xmid = (xend + xstart) / 2; ymid = (yend + ystart) / 2; @@ -694,8 +684,8 @@ public class PDBCanvas extends JPanel implements MouseListener, if (highlightBond1 != null && highlightBond1 == tmpBond) { - g.setColor(tmpBond.endCol.brighter().brighter().brighter() - .brighter()); + g.setColor( + tmpBond.endCol.brighter().brighter().brighter().brighter()); drawLine(g, xmid, ymid, xend, yend); } @@ -760,6 +750,7 @@ public class PDBCanvas extends JPanel implements MouseListener, } } + @Override public void mousePressed(MouseEvent e) { pdbAction = true; @@ -772,23 +763,25 @@ public class PDBCanvas extends JPanel implements MouseListener, repaint(); if (foundchain != -1) { - PDBChain chain = pdb.chains.elementAt(foundchain); + PDBChain chain = pdb.getChains().elementAt(foundchain); if (chain == mainchain) { if (fatom.alignmentMapping != -1) { if (highlightRes == null) { - highlightRes = new Vector(); + highlightRes = new Vector(); } - if (highlightRes.contains(fatom.alignmentMapping + "")) + final String atomString = Integer + .toString(fatom.alignmentMapping); + if (highlightRes.contains(atomString)) { - highlightRes.remove(fatom.alignmentMapping + ""); + highlightRes.remove(atomString); } else { - highlightRes.add(fatom.alignmentMapping + ""); + highlightRes.add(atomString); } } } @@ -802,6 +795,7 @@ public class PDBCanvas extends JPanel implements MouseListener, dragging = false; } + @Override public void mouseMoved(MouseEvent e) { pdbAction = true; @@ -818,7 +812,7 @@ public class PDBCanvas extends JPanel implements MouseListener, PDBChain chain = null; if (foundchain != -1) { - chain = pdb.chains.elementAt(foundchain); + chain = pdb.getChains().elementAt(foundchain); if (chain == mainchain) { mouseOverStructure(fatom.resNumber, chain.id); @@ -827,8 +821,8 @@ public class PDBCanvas extends JPanel implements MouseListener, if (fatom != null) { - this.setToolTipText(chain.id + ":" + fatom.resNumber + " " - + fatom.resName); + this.setToolTipText( + chain.id + ":" + fatom.resNumber + " " + fatom.resName); } else { @@ -837,18 +831,22 @@ public class PDBCanvas extends JPanel implements MouseListener, } } + @Override public void mouseClicked(MouseEvent e) { } + @Override public void mouseEntered(MouseEvent e) { } + @Override public void mouseExited(MouseEvent e) { } + @Override public void mouseDragged(MouseEvent evt) { int x = evt.getX(); @@ -859,7 +857,7 @@ public class PDBCanvas extends JPanel implements MouseListener, MCMatrix objmat = new MCMatrix(3, 3); objmat.setIdentity(); - if ((evt.getModifiers() & Event.META_MASK) != 0) + if ((evt.getModifiersEx() & InputEvent.META_DOWN_MASK) != 0) { objmat.rotatez(((mx - omx))); } @@ -870,14 +868,10 @@ public class PDBCanvas extends JPanel implements MouseListener, } // Alter the bonds - for (int ii = 0; ii < pdb.chains.size(); ii++) + for (PDBChain chain : pdb.getChains()) { - Vector bonds = pdb.chains.elementAt(ii).bonds; - - for (int i = 0; i < bonds.size(); i++) + for (Bond tmpBond : chain.bonds) { - Bond tmpBond = (Bond) bonds.elementAt(i); - // Translate the bond so the centre is 0,0,0 tmpBond.translate(-centre[0], -centre[1], -centre[2]); @@ -902,6 +896,7 @@ public class PDBCanvas extends JPanel implements MouseListener, repaint(); } + @Override public void mouseReleased(MouseEvent evt) { dragging = false; @@ -911,18 +906,12 @@ public class PDBCanvas extends JPanel implements MouseListener, void drawLabels(Graphics g) { - for (int ii = 0; ii < pdb.chains.size(); ii++) + for (PDBChain chain : pdb.getChains()) { - PDBChain chain = pdb.chains.elementAt(ii); - if (chain.isVisible) { - Vector bonds = pdb.chains.elementAt(ii).bonds; - - for (int i = 0; i < bonds.size(); i++) + for (Bond tmpBond : chain.bonds) { - Bond tmpBond = (Bond) bonds.elementAt(i); - if (tmpBond.at1.isSelected) { labelAtom(g, tmpBond, 1); @@ -930,7 +919,6 @@ public class PDBCanvas extends JPanel implements MouseListener, if (tmpBond.at2.isSelected) { - labelAtom(g, tmpBond, 2); } } @@ -944,16 +932,20 @@ public class PDBCanvas extends JPanel implements MouseListener, g.setColor(Color.red); if (n == 1) { - int xstart = (int) (((b.start[0] - centre[0]) * scale) + (getWidth() / 2)); - int ystart = (int) (((centre[1] - b.start[1]) * scale) + (getHeight() / 2)); + int xstart = (int) (((b.start[0] - centre[0]) * scale) + + (getWidth() / 2)); + int ystart = (int) (((centre[1] - b.start[1]) * scale) + + (getHeight() / 2)); g.drawString(b.at1.resName + "-" + b.at1.resNumber, xstart, ystart); } if (n == 2) { - int xstart = (int) (((b.end[0] - centre[0]) * scale) + (getWidth() / 2)); - int ystart = (int) (((centre[1] - b.end[1]) * scale) + (getHeight() / 2)); + int xstart = (int) (((b.end[0] - centre[0]) * scale) + + (getWidth() / 2)); + int ystart = (int) (((centre[1] - b.end[1]) * scale) + + (getHeight() / 2)); g.drawString(b.at2.resName + "-" + b.at2.resNumber, xstart, ystart); } @@ -967,25 +959,25 @@ public class PDBCanvas extends JPanel implements MouseListener, foundchain = -1; - for (int ii = 0; ii < pdb.chains.size(); ii++) + for (int ii = 0; ii < pdb.getChains().size(); ii++) { - PDBChain chain = pdb.chains.elementAt(ii); + PDBChain chain = pdb.getChains().elementAt(ii); int truex; Bond tmpBond = null; if (chain.isVisible) { - Vector bonds = pdb.chains.elementAt(ii).bonds; - - for (int i = 0; i < bonds.size(); i++) + for (Bond bond : chain.bonds) { - tmpBond = (Bond) bonds.elementAt(i); + tmpBond = bond; - truex = (int) (((tmpBond.start[0] - centre[0]) * scale) + (getWidth() / 2)); + truex = (int) (((tmpBond.start[0] - centre[0]) * scale) + + (getWidth() / 2)); if (Math.abs(truex - x) <= 2) { - int truey = (int) (((centre[1] - tmpBond.start[1]) * scale) + (getHeight() / 2)); + int truey = (int) (((centre[1] - tmpBond.start[1]) * scale) + + (getHeight() / 2)); if (Math.abs(truey - y) <= 2) { @@ -998,11 +990,13 @@ public class PDBCanvas extends JPanel implements MouseListener, // Still here? Maybe its the last bond - truex = (int) (((tmpBond.end[0] - centre[0]) * scale) + (getWidth() / 2)); + truex = (int) (((tmpBond.end[0] - centre[0]) * scale) + + (getWidth() / 2)); if (Math.abs(truex - x) <= 2) { - int truey = (int) (((tmpBond.end[1] - centre[1]) * scale) + (getHeight() / 2)); + int truey = (int) (((tmpBond.end[1] - centre[1]) * scale) + + (getHeight() / 2)); if (Math.abs(truey - y) <= 2) { @@ -1015,8 +1009,8 @@ public class PDBCanvas extends JPanel implements MouseListener, } if (fatom != null) // )&& chain.ds != null) - { - chain = pdb.chains.elementAt(foundchain); + { // dead code? value of chain is either overwritten or discarded + chain = pdb.getChains().elementAt(foundchain); } } @@ -1041,7 +1035,7 @@ public class PDBCanvas extends JPanel implements MouseListener, Bond tmpBond; for (index = 0; index < mainchain.bonds.size(); index++) { - tmpBond = (Bond) mainchain.bonds.elementAt(index); + tmpBond = mainchain.bonds.elementAt(index); if (tmpBond.at1.alignmentMapping == ii - 1) { if (highlightBond1 != null) @@ -1059,13 +1053,13 @@ public class PDBCanvas extends JPanel implements MouseListener, if (index > 0) { - highlightBond1 = (Bond) mainchain.bonds.elementAt(index - 1); + highlightBond1 = mainchain.bonds.elementAt(index - 1); highlightBond1.at2.isSelected = true; } if (index != mainchain.bonds.size()) { - highlightBond2 = (Bond) mainchain.bonds.elementAt(index); + highlightBond2 = mainchain.bonds.elementAt(index); highlightBond2.at1.isSelected = true; } @@ -1079,9 +1073,9 @@ public class PDBCanvas extends JPanel implements MouseListener, public void setAllchainsVisible(boolean b) { - for (int ii = 0; ii < pdb.chains.size(); ii++) + for (int ii = 0; ii < pdb.getChains().size(); ii++) { - PDBChain chain = pdb.chains.elementAt(ii); + PDBChain chain = pdb.getChains().elementAt(ii); chain.isVisible = b; } mainchain.isVisible = true; @@ -1091,10 +1085,10 @@ public class PDBCanvas extends JPanel implements MouseListener, // //////////////////////////////// // /StructureListener - public String[] getPdbFile() + @Override + public String[] getStructureFiles() { - return new String[] - { pdbentry.getFile() }; + return new String[] { pdbentry.getFile() }; } String lastMessage; @@ -1153,7 +1147,7 @@ public class PDBCanvas extends JPanel implements MouseListener, Bond tmpBond; for (index = 0; index < mainchain.bonds.size(); index++) { - tmpBond = (Bond) mainchain.bonds.elementAt(index); + tmpBond = mainchain.bonds.elementAt(index); if (tmpBond.at1.atomIndex == atomIndex) { if (highlightBond1 != null) @@ -1171,13 +1165,13 @@ public class PDBCanvas extends JPanel implements MouseListener, if (index > 0) { - highlightBond1 = (Bond) mainchain.bonds.elementAt(index - 1); + highlightBond1 = mainchain.bonds.elementAt(index - 1); highlightBond1.at2.isSelected = true; } if (index != mainchain.bonds.size()) { - highlightBond2 = (Bond) mainchain.bonds.elementAt(index); + highlightBond2 = mainchain.bonds.elementAt(index); highlightBond2.at1.isSelected = true; } @@ -1196,6 +1190,7 @@ public class PDBCanvas extends JPanel implements MouseListener, // return new Color(viewer.getAtomArgb(atomIndex)); } + @Override public void updateColours(Object source) { colourBySequence(); @@ -1210,4 +1205,19 @@ public class PDBCanvas extends JPanel implements MouseListener, } + @Override + public boolean isListeningFor(SequenceI seq) + { + if (sequence != null) + { + for (SequenceI s : sequence) + { + if (s == seq) + { + return true; + } + } + } + return false; + } }