{\r
seq.setName(dialog.getName());\r
seq.setDescription(dialog.getDescription());\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
}\r
\r
\r
void refresh()\r
{\r
- ap.seqPanel.seqCanvas.repaint();\r
- if (ap.overviewPanel != null)\r
- {\r
- ap.overviewPanel.updateOverviewImage();\r
- }\r
+ ap.paintAlignment(true);\r
}\r
\r
protected void clustalColour_actionPerformed()\r
SequenceGroup sg = ap.av.getSelectionGroup();\r
ap.av.alignment.deleteGroup(sg);\r
ap.av.setSelectionGroup(null);\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
public void showColourText_itemStateChanged()\r
DEFAULT_HEIGHT);\r
}\r
alignPanel.validate();\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
public AlignViewport getAlignViewport()\r
}\r
viewport.showSequenceFeatures = true;\r
sequenceFeatures.setState(true);\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
}\r
break;\r
\r
case KeyEvent.VK_LEFT:\r
- if (viewport.cursorMode)\r
- {\r
+ if (evt.isAltDown() || !viewport.cursorMode)\r
+ slideSequences(false,\r
+ alignPanel.seqPanel.getKeyboardNo1());\r
+ else\r
alignPanel.seqPanel.moveCursor( -1, 0);\r
- }\r
break;\r
\r
case KeyEvent.VK_RIGHT:\r
- if (viewport.cursorMode)\r
- {\r
- alignPanel.seqPanel.moveCursor(1, 0);\r
- }\r
- break;\r
+ if (evt.isAltDown() || !viewport.cursorMode)\r
+ slideSequences(true,\r
+ alignPanel.seqPanel.getKeyboardNo1());\r
+ else\r
+ alignPanel.seqPanel.moveCursor( 1, 0);\r
+ break;\r
+\r
case KeyEvent.VK_SPACE:\r
if (viewport.cursorMode)\r
{\r
break;\r
\r
}\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
public void keyReleased(KeyEvent evt)\r
viewport.autocalculateConsensus = autoCalculate.getState();\r
}\r
\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
public void actionPerformed(ActionEvent evt)\r
else if (source == invertColSel)\r
{\r
viewport.invertColumnSelection();\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
else if (source == remove2LeftMenuItem)\r
{\r
else if (source == showColumns)\r
{\r
viewport.showAllHiddenColumns();\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
else if (source == showSeqs)\r
{\r
else if (source == hideColumns)\r
{\r
viewport.hideSelectedColumns();\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
else if (source == hideSequences && viewport.getSelectionGroup() != null)\r
{\r
}\r
}\r
\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+\r
+ synchronized void slideSequences(boolean right, int size)\r
+ {\r
+ if(viewport.hasHiddenColumns)\r
+ {\r
+ System.out.println("Slide Sequences not available with hidden columns");\r
+ return;\r
+ }\r
+ Vector sg = new Vector();\r
+ if(viewport.cursorMode)\r
+ {\r
+ sg.addElement(viewport.alignment.getSequenceAt(\r
+ alignPanel.seqPanel.seqCanvas.cursorY));\r
+ }\r
+ else if(viewport.getSelectionGroup()!=null\r
+ && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight())\r
+ {\r
+ sg = viewport.getSelectionGroup().getSequences(\r
+ viewport.hiddenRepSequences);\r
+ }\r
+\r
+ if(sg.size()<1)\r
+ {\r
+ return;\r
+ }\r
+\r
+ Vector invertGroup = new Vector();\r
+\r
+ for (int i = 0; i < viewport.alignment.getHeight(); i++)\r
+ {\r
+ if(!sg.contains(viewport.alignment.getSequenceAt(i)))\r
+ invertGroup.add(viewport.alignment.getSequenceAt(i));\r
+ }\r
+\r
+ SequenceI[] seqs1 = new SequenceI[sg.size()];\r
+ for (int i = 0; i < sg.size(); i++)\r
+ seqs1[i] = (SequenceI) sg.elementAt(i);\r
+\r
+ SequenceI[] seqs2 = new SequenceI[invertGroup.size()];\r
+ for (int i = 0; i < invertGroup.size(); i++)\r
+ seqs2[i] = (SequenceI) invertGroup.elementAt(i);\r
+\r
+ SlideSequencesCommand ssc;\r
+ if (right)\r
+ ssc = new SlideSequencesCommand("Slide Sequences",\r
+ seqs2, seqs1, size,\r
+ viewport.getGapCharacter()\r
+ );\r
+ else\r
+ ssc = new SlideSequencesCommand("Slide Sequences",\r
+ seqs1, seqs2, size,\r
+ viewport.getGapCharacter()\r
+ );\r
+\r
+ int groupAdjustment = 0;\r
+ if (ssc.getGapsInsertedBegin() && right)\r
+ {\r
+ if (viewport.cursorMode)\r
+ alignPanel.seqPanel.moveCursor(size, 0);\r
+ else\r
+ groupAdjustment = size;\r
+ }\r
+ else if (!ssc.getGapsInsertedBegin() && !right)\r
+ {\r
+ if (viewport.cursorMode)\r
+ alignPanel.seqPanel.moveCursor( -size, 0);\r
+ else\r
+ groupAdjustment = -size;\r
+ }\r
+\r
+ if (groupAdjustment != 0)\r
+ {\r
+ viewport.getSelectionGroup().setStartRes(\r
+ viewport.getSelectionGroup().getStartRes() + groupAdjustment);\r
+ viewport.getSelectionGroup().setEndRes(\r
+ viewport.getSelectionGroup().getEndRes() + groupAdjustment);\r
+ }\r
+\r
+\r
+ boolean appendHistoryItem = false;\r
+ if(viewport.historyList!=null\r
+ && viewport.historyList.size()>0\r
+ && viewport.historyList.peek() instanceof SlideSequencesCommand)\r
+ {\r
+ appendHistoryItem = ssc.appendSlideCommand(\r
+ (SlideSequencesCommand)viewport.historyList.peek())\r
+ ;\r
+ }\r
+\r
+ if(!appendHistoryItem)\r
+ addHistoryItem(ssc);\r
+\r
+ repaint();\r
}\r
\r
static StringBuffer copiedSequences;\r
viewport.sequenceColours = null;\r
viewport.setSelectionGroup(null);\r
\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
public void selectAllSequenceMenuItem_actionPerformed()\r
}\r
sg.setEndRes(viewport.alignment.getWidth() - 1);\r
viewport.setSelectionGroup(sg);\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());\r
}\r
\r
viewport.setSelectionGroup(null);\r
alignPanel.idPanel.idCanvas.searchResults = null;\r
alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());\r
}\r
\r
{\r
viewport.setShowJVSuffix(seqLimits.getState());\r
alignPanel.fontChanged();\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
protected void colourTextMenuItem_actionPerformed()\r
{\r
viewport.setColourText(colourTextMenuItem.getState());\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
protected void wrapMenuItem_actionPerformed()\r
scaleAbove.setEnabled(wrapMenuItem.getState());\r
scaleLeft.setEnabled(wrapMenuItem.getState());\r
scaleRight.setEnabled(wrapMenuItem.getState());\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
public void overviewMenuItem_actionPerformed()\r
alignPanel.getOverviewPanel().updateOverviewImage();\r
}\r
\r
- alignPanel.repaint();\r
+ jalview.structure.StructureSelectionManager.getStructureSelectionManager()\r
+ .sequenceColoursChanged(alignPanel);\r
+\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
protected void modifyPID_actionPerformed()\r
viewport.getAlignment().getSequenceAt(0));\r
addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder,\r
viewport.alignment));\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
public void sortIDMenuItem_actionPerformed()\r
// addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,\r
// HistoryItem.SORT));\r
AlignmentSorter.sortByID(viewport.getAlignment());\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
public void sortGroupMenuItem_actionPerformed()\r
// addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,\r
// HistoryItem.SORT));\r
AlignmentSorter.sortByGroup(viewport.getAlignment());\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
\r
}\r
\r
current.insertCharAt(Width - 1, viewport.getGapCharacter());\r
}\r
}\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
if ( (viewport.getSelectionGroup() != null &&\r
current.insertCharAt(Width - 1, viewport.getGapCharacter());\r
}\r
}\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
\r
}\r
\r
// addHistoryItem(new HistoryItem("Sort", viewport.alignment,\r
// HistoryItem.SORT));\r
AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree());\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
});\r
\r
{\r
if (ap != null)\r
{\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
Thread.sleep(200);\r
}\r
\r
if (ap != null)\r
{\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
}\r
{\r
if (ap != null)\r
{\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
Thread.sleep(200);\r
\r
if (ap != null)\r
{\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
}\r
}\r
\r
public void hideAllSelectedSeqs()\r
{\r
- if (selectionGroup == null)\r
+ if (selectionGroup == null || selectionGroup.getSize()<1)\r
{\r
return;\r
}\r
extends Panel implements AdjustmentListener\r
{\r
\r
- AlignViewport av;\r
+ public AlignViewport av;\r
OverviewPanel overviewPanel;\r
SeqPanel seqPanel;\r
IdPanel idPanel;\r
\r
}\r
\r
+ public SequenceRenderer getSequenceRenderer()\r
+ {\r
+ return seqPanel.seqCanvas.sr;\r
+ }\r
+\r
+ public FeatureRenderer getFeatureRenderer()\r
+ {\r
+ return seqPanel.seqCanvas.fr;\r
+ }\r
+\r
public void alignmentChanged()\r
{\r
av.alignmentChanged(this);\r
\r
}\r
\r
+ public void paintAlignment(boolean updateOverview)\r
+ {\r
+ repaint();\r
+\r
+ if(updateOverview)\r
+ {\r
+ jalview.structure.StructureSelectionManager.getStructureSelectionManager()\r
+ .sequenceColoursChanged(this);\r
+\r
+ if (overviewPanel != null)\r
+ {\r
+ overviewPanel.updateOverviewImage();\r
+ }\r
+ }\r
+ }\r
+\r
public void update(Graphics g)\r
{\r
paint(g);\r
scalePanel.repaint();\r
annotationPanel.repaint();\r
idPanel.idCanvas.repaint();\r
-\r
- if (getBounds() == g.getClipBounds())\r
- {\r
- if (overviewPanel != null)\r
- {\r
- overviewPanel.updateOverviewImage();\r
- }\r
- }\r
-\r
}\r
\r
protected Panel sequenceHolderPanel = new Panel();\r
\r
public class AnnotationColourChooser\r
extends Panel implements ActionListener,\r
- AdjustmentListener, ItemListener\r
+ AdjustmentListener, ItemListener, MouseListener\r
{\r
Frame frame;\r
AlignViewport av;\r
this.ap = ap;\r
\r
slider.addAdjustmentListener(this);\r
+ slider.addMouseListener(this);\r
\r
if (av.alignment.getAlignmentAnnotation() == null)\r
{\r
else if (evt.getSource() == cancel)\r
{\r
reset();\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
frame.setVisible(false);\r
}\r
\r
}\r
\r
currentAnnotation.threshold.value = (float) slider.getValue() / 1000f;\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
}\r
\r
}\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
void reset()\r
sg.cs = (ColourSchemeI) oldgroupColours.get(sg);\r
}\r
}\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
\r
}\r
\r
+ public void mouseClicked(MouseEvent evt){}\r
+ public void mousePressed(MouseEvent evt){}\r
+ public void mouseReleased(MouseEvent evt){ ap.paintAlignment(true);}\r
+ public void mouseEntered(MouseEvent evt){}\r
+ public void mouseExited(MouseEvent evt){}\r
+\r
+\r
}\r
ap.annotationPanel.adjustPanelHeight();\r
setSize(getSize().width, ap.annotationPanel.getSize().height);\r
ap.validate();\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
public void mouseMoved(MouseEvent evt)\r
public void itemStateChanged(ItemEvent e)\r
{\r
ap.av.setIgnoreGapsConsensus(cbmi.getState());\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
});\r
pop.add(cbmi);\r
boolean pdbImport = false;\r
boolean treeImport = false;\r
boolean annotationImport = false;\r
- Sequence seq;\r
+ Sequence seq;\r
AlignFrame alignFrame;\r
\r
public CutAndPasteTransfer(boolean forImport, AlignFrame alignFrame)\r
\r
if (pdbImport)\r
{\r
- new MCview.AppletPDBViewer(text, AppletFormatAdapter.PASTE,\r
- seq,\r
- alignFrame.getSeqcanvas());\r
+ PDBEntry pdb = new PDBEntry();\r
+ pdb.setFile(text);\r
+\r
+ if ( alignFrame.alignPanel.av.applet.jmolAvailable )\r
+ new jalview.appletgui.AppletJmol(pdb,\r
+ new Sequence[]\r
+ {seq},\r
+ alignFrame.alignPanel,\r
+ AppletFormatAdapter.PASTE);\r
+ else\r
+\r
+ new MCview.AppletPDBViewer(pdb,\r
+ new Sequence[]\r
+ {seq},\r
+ alignFrame.alignPanel,\r
+ AppletFormatAdapter.PASTE);\r
+\r
}\r
else if (treeImport)\r
{\r
fr.setColour(feature, col);\r
featurePanel.removeAll();\r
resetTable(false);\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
public void mouseEntered(MouseEvent evt)\r
if (ap != null)\r
{\r
ap.av.setFont(oldFont);\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
else if (tp != null)\r
{\r
}\r
\r
lastid = seq;\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
public void mouseClicked(MouseEvent e)\r
selectSeq(seq);\r
}\r
\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
void selectSeq(int seq)\r
running = false;\r
}\r
\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
try\r
{\r
Thread.sleep(100);\r
}\r
\r
ap.setScrollValues(col, row);\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
/**\r
og.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2);\r
g.drawImage(offscreen, 0, 0, this);\r
}\r
- else\r
- {\r
- g.setColor(Color.white);\r
- g.fillRect(0, 0, getSize().width, getSize().height);\r
- g.setColor(Color.black);\r
- g.setFont(new Font("Verdana", Font.BOLD, 15));\r
- g.drawString("Recalculating", 5, sequencesHeight / 2);\r
- g.drawString("Overview.....", 5, (sequencesHeight / 2) + 20);\r
- }\r
}\r
\r
}\r
ap.alignFrame.updateEditMenuBar();\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
\r
if (historyList.size() == 0)\r
{\r
{\r
av.showColumn(reveal[0]);\r
reveal = null;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
if (ap.overviewPanel != null)\r
{\r
ap.overviewPanel.updateOverviewImage();\r
{\r
av.showAllHiddenColumns();\r
reveal = null;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
if (ap.overviewPanel != null)\r
{\r
ap.overviewPanel.updateOverviewImage();\r
av.setSelectionGroup(null);\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
if (ap.overviewPanel != null)\r
{\r
ap.overviewPanel.updateOverviewImage();\r
}\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
public void mouseReleased(MouseEvent evt)\r
\r
if (!stretchingGroup)\r
{\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
\r
return;\r
}\r
}\r
\r
stretchingGroup = false;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
public void mouseDragged(MouseEvent evt)\r
}\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
}\r
\r
return fr;\r
}\r
\r
- MCview.AppletPDBCanvas pdbCanvas;\r
public SequenceRenderer getSequenceRenderer()\r
{\r
return sr;\r
}\r
\r
- public void setPDBCanvas(MCview.AppletPDBCanvas pc)\r
- {\r
- pdbCanvas = pc;\r
- }\r
-\r
void drawNorthScale(Graphics g, int startx, int endx, int ypos)\r
{\r
int scalestartx = startx - startx % 10 + 10;\r
\r
g.drawImage(img, 0, 0, this);\r
\r
- if (pdbCanvas != null)\r
- {\r
- pdbCanvas.updateSeqColours();\r
- }\r
}\r
\r
int LABEL_WEST, LABEL_EAST;\r
import jalview.commands.*;\r
import jalview.datamodel.*;\r
import jalview.schemes.*;\r
+import jalview.structure.SequenceListener;\r
+import jalview.structure.StructureSelectionManager;\r
\r
public class SeqPanel\r
- extends Panel implements MouseMotionListener, MouseListener\r
+ extends Panel implements MouseMotionListener, MouseListener, SequenceListener\r
{\r
\r
public SeqCanvas seqCanvas;\r
\r
EditCommand editCommand;\r
\r
+ StructureSelectionManager ssm;\r
+\r
+\r
public SeqPanel(AlignViewport avp, AlignmentPanel p)\r
{\r
this.av = avp;\r
\r
seqCanvas.addMouseMotionListener(this);\r
seqCanvas.addMouseListener(this);\r
+ ssm = StructureSelectionManager.getStructureSelectionManager();\r
+ ssm.addStructureViewerListener(this);\r
\r
seqCanvas.repaint();\r
}\r
\r
void setCursorRow()\r
{\r
- seqCanvas.cursorY = getKeyboardNo(keyboardNo1) - 1;\r
+ seqCanvas.cursorY = getKeyboardNo1() - 1;\r
scrollToVisible();\r
}\r
\r
void setCursorColumn()\r
{\r
- seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1;\r
+ seqCanvas.cursorX = getKeyboardNo1() - 1;\r
scrollToVisible();\r
}\r
\r
}\r
else\r
{\r
- seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1;\r
- seqCanvas.cursorY = getKeyboardNo(keyboardNo2) - 1;\r
+ seqCanvas.cursorX = getKeyboardNo1() - 1;\r
+ seqCanvas.cursorY = getKeyboardNo2() - 1;\r
scrollToVisible();\r
}\r
}\r
(Sequence) av.getAlignment().getSequenceAt(seqCanvas.cursorY);\r
\r
seqCanvas.cursorX = sequence.findIndex(\r
- getKeyboardNo(keyboardNo1) - 1\r
+ getKeyboardNo1() - 1\r
);\r
scrollToVisible();\r
}\r
av.setSelectionGroup(sg);\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
void insertGapAtCursor(boolean group)\r
groupEditing = group;\r
startseq = seqCanvas.cursorY;\r
lastres = seqCanvas.cursorX;\r
- editSequence(true, seqCanvas.cursorX + getKeyboardNo(keyboardNo1));\r
+ editSequence(true, seqCanvas.cursorX + getKeyboardNo1());\r
endEditing();\r
}\r
\r
{\r
groupEditing = group;\r
startseq = seqCanvas.cursorY;\r
- lastres = seqCanvas.cursorX + getKeyboardNo(keyboardNo1);\r
+ lastres = seqCanvas.cursorX + getKeyboardNo1();\r
editSequence(false, seqCanvas.cursorX);\r
endEditing();\r
}\r
}\r
}\r
\r
- int getKeyboardNo(StringBuffer kb)\r
+ int getKeyboardNo1()\r
{\r
- if (kb == null)\r
- {\r
+ if (keyboardNo1 == null)\r
return 1;\r
+ else\r
+ {\r
+ int value = Integer.parseInt(keyboardNo1.toString());\r
+ keyboardNo1 = null;\r
+ return value;\r
}\r
+ }\r
+\r
+ int getKeyboardNo2()\r
+ {\r
+ if (keyboardNo2 == null)\r
+ return 1;\r
else\r
{\r
- return Integer.parseInt(kb.toString());\r
+ int value = Integer.parseInt(keyboardNo2.toString());\r
+ keyboardNo2 = null;\r
+ return value;\r
}\r
}\r
\r
+\r
void setStatusMessage(SequenceI sequence, int res, int seq)\r
{\r
StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " +\r
{\r
mouseDragging = false;\r
mouseWheelPressed = false;\r
+ ap.paintAlignment(true);\r
\r
if (!editingSeqs)\r
{\r
}\r
\r
endEditing();\r
- ap.repaint();\r
+\r
}\r
\r
int startWrapBlock = -1;\r
return;\r
}\r
\r
+\r
+ String lastMessage;\r
+ public void mouseOverSequence(SequenceI sequence, int index)\r
+ {\r
+ String tmp = sequence.hashCode()+index+"";\r
+ if (lastMessage == null || !lastMessage.equals(tmp))\r
+ ssm.mouseOverSequence(sequence, index);\r
+\r
+ lastMessage = tmp;\r
+ }\r
+\r
+\r
+ public void highlightSequence(jalview.datamodel.SequenceI seq, int index)\r
+ {\r
+ if(av.alignment.findIndex(seq)>-1)\r
+ {\r
+ SearchResults highlight = new SearchResults();\r
+ highlight.addResult(seq,index,index);\r
+ seqCanvas.highlightSearchResults(highlight);\r
+ }\r
+ }\r
+\r
+ public void updateColours(SequenceI seq, int index)\r
+ {\r
+ System.out.println("update the seqPanel colours");\r
+ //repaint();\r
+ }\r
+\r
public void mouseMoved(MouseEvent evt)\r
{\r
int res = findRes(evt);\r
return;\r
}\r
\r
+\r
+ if (ssm != null)\r
+ mouseOverSequence(sequence, sequence.findPosition(res));\r
+\r
+\r
StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " +\r
sequence.getName());\r
\r
}\r
}\r
\r
- if (seqCanvas.pdbCanvas != null && sequence == seqCanvas.pdbCanvas.sequence)\r
- {\r
- seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res));\r
- }\r
-\r
ap.alignFrame.statusBar.setText(text.toString());\r
\r
StringBuffer tooltipText = new StringBuffer();\r
\r
lastMousePress = evt.getPoint();\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
ap.annotationPanel.image = null;\r
return;\r
}\r
APopupMenu popup = new APopupMenu(ap, null, links);\r
this.add(popup);\r
popup.show(this, evt.getX(), evt.getY());\r
- ap.repaint();\r
return;\r
}\r
\r
changeStartRes = false;\r
stretchGroup = null;\r
PaintRefresher.Refresh(ap, av.getSequenceSetId());\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
public void doMouseDraggedDefineMode(MouseEvent evt)\r
\r
public void mouseReleased(MouseEvent evt)\r
{\r
- if (ap.overviewPanel != null)\r
- {\r
- ap.overviewPanel.updateOverviewImage();\r
- }\r
+ ap.paintAlignment(true);\r
}\r
\r
public void mouseClicked(MouseEvent evt)\r
ap.av.setGlobalColourScheme(ucs);\r
}\r
ap.seqPanel.seqCanvas.img = null;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
else if (pdbcanvas != null)\r
{\r
- pdbcanvas.pdb.setColours(ucs);\r
- pdbcanvas.updateSeqColours();\r
+ pdbcanvas.setColours(ucs);\r
}\r
}\r
\r
{\r
ap.av.setGlobalColourScheme(ucs);\r
}\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
else if (pdbcanvas != null)\r
{\r
break;
case KeyEvent.VK_DOWN:
- if (viewport.cursorMode)
- {
- alignPanel.seqPanel.moveCursor(0, 1);
- }
- else
- {
+ if (evt.isAltDown() || !viewport.cursorMode)
moveSelectedSequences(false);
- }
+ if(viewport.cursorMode)
+ alignPanel.seqPanel.moveCursor(0, 1);
break;
case KeyEvent.VK_UP:
- if (viewport.cursorMode)
- {
- alignPanel.seqPanel.moveCursor(0, -1);
- }
- else
- {
+ if (evt.isAltDown() || !viewport.cursorMode)
moveSelectedSequences(true);
- }
+ if(viewport.cursorMode)
+ alignPanel.seqPanel.moveCursor(0, -1);
+
break;
case KeyEvent.VK_LEFT:
- if (viewport.cursorMode)
- {
+ if (evt.isAltDown() || !viewport.cursorMode)
+ slideSequences(false,
+ alignPanel.seqPanel.getKeyboardNo1());
+ else
alignPanel.seqPanel.moveCursor( -1, 0);
- }
+
+
break;
case KeyEvent.VK_RIGHT:
- if (viewport.cursorMode)
- {
- alignPanel.seqPanel.moveCursor(1, 0);
- }
+ if (evt.isAltDown() || !viewport.cursorMode)
+ slideSequences(true,
+ alignPanel.seqPanel.getKeyboardNo1());
+ else
+ alignPanel.seqPanel.moveCursor( 1, 0);
break;
case KeyEvent.VK_SPACE:
break;
}
}
+
+ public void keyReleased(KeyEvent evt)
+ {
+ switch(evt.getKeyCode())
+ {
+ case KeyEvent.VK_LEFT:
+ if (evt.isAltDown() || !viewport.cursorMode)
+ viewport.firePropertyChange("alignment", null,
+ viewport.getAlignment().getSequences());
+ break;
+
+ case KeyEvent.VK_RIGHT:
+ if (evt.isAltDown() || !viewport.cursorMode)
+ viewport.firePropertyChange("alignment", null,
+ viewport.getAlignment().getSequences());
+ break;
+ }
+ }
});
}
}
}
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
+
+ synchronized void slideSequences(boolean right, int size)
+ {
+ if(viewport.hasHiddenColumns)
+ {
+ JOptionPane.showInternalMessageDialog(Desktop.desktop,
+ "Slide Sequences not available with hidden columns",
+ "Slide Sequence not Available",
+ JOptionPane.WARNING_MESSAGE);
+ return;
+ }
+ Vector sg = new Vector();
+ if(viewport.cursorMode)
+ {
+ sg.addElement(viewport.alignment.getSequenceAt(
+ alignPanel.seqPanel.seqCanvas.cursorY));
+ }
+ else if(viewport.getSelectionGroup()!=null
+ && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight())
+ {
+ sg = viewport.getSelectionGroup().getSequences(
+ viewport.hiddenRepSequences);
+ }
+
+ if(sg.size()<1)
+ {
+ return;
+ }
+
+ Vector invertGroup = new Vector();
+
+ for (int i = 0; i < viewport.alignment.getHeight(); i++)
+ {
+ if(!sg.contains(viewport.alignment.getSequenceAt(i)))
+ invertGroup.add(viewport.alignment.getSequenceAt(i));
+ }
+
+ SequenceI[] seqs1 = new SequenceI[sg.size()];
+ for (int i = 0; i < sg.size(); i++)
+ seqs1[i] = (SequenceI) sg.elementAt(i);
+
+ SequenceI[] seqs2 = new SequenceI[invertGroup.size()];
+ for (int i = 0; i < invertGroup.size(); i++)
+ seqs2[i] = (SequenceI) invertGroup.elementAt(i);
+
+ SlideSequencesCommand ssc;
+ if (right)
+ ssc = new SlideSequencesCommand("Slide Sequences",
+ seqs2, seqs1, size,
+ viewport.getGapCharacter()
+ );
+ else
+ ssc = new SlideSequencesCommand("Slide Sequences",
+ seqs1, seqs2, size,
+ viewport.getGapCharacter()
+ );
+
+ int groupAdjustment = 0;
+ if (ssc.getGapsInsertedBegin() && right)
+ {
+ if (viewport.cursorMode)
+ alignPanel.seqPanel.moveCursor(size, 0);
+ else
+ groupAdjustment = size;
+ }
+ else if (!ssc.getGapsInsertedBegin() && !right)
+ {
+ if (viewport.cursorMode)
+ alignPanel.seqPanel.moveCursor( -size, 0);
+ else
+ groupAdjustment = -size;
+ }
+
+ if (groupAdjustment != 0)
+ {
+ viewport.getSelectionGroup().setStartRes(
+ viewport.getSelectionGroup().getStartRes() + groupAdjustment);
+ viewport.getSelectionGroup().setEndRes(
+ viewport.getSelectionGroup().getEndRes() + groupAdjustment);
+ }
+
+
+ boolean appendHistoryItem = false;
+ if(viewport.historyList!=null
+ && viewport.historyList.size()>0
+ && viewport.historyList.peek() instanceof SlideSequencesCommand)
+ {
+ appendHistoryItem = ssc.appendSlideCommand(
+ (SlideSequencesCommand)viewport.historyList.peek())
+ ;
+ }
+
+ if(!appendHistoryItem)
+ addHistoryItem(ssc);
+
+ repaint();
+ }
+
+
/**
* DOCUMENT ME!
*
viewport.sequenceColours = null;
viewport.setSelectionGroup(null);
PaintRefresher.Refresh(this, viewport.getSequenceSetId());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
sg.setEndRes(viewport.alignment.getWidth() - 1);
viewport.setSelectionGroup(sg);
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
}
viewport.setSelectionGroup(null);
alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
alignPanel.idPanel.idCanvas.searchResults = null;
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
}
sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
}
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
}
public void invertColSel_actionPerformed(ActionEvent e)
{
viewport.invertColumnSelection();
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
viewport.setShowJVSuffix(seqLimits.isSelected());
alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel.calculateIdWidth());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
public void idRightAlign_actionPerformed(ActionEvent e)
{
viewport.rightAlignIds = idRightAlign.isSelected();
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
protected void colourTextMenuItem_actionPerformed(ActionEvent e)
{
viewport.setColourText(colourTextMenuItem.isSelected());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
public void hideSelSequences_actionPerformed(ActionEvent e)
{
viewport.hideAllSelectedSeqs();
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
public void hideSelColumns_actionPerformed(ActionEvent e)
{
viewport.hideSelectedColumns();
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
public void hiddenMarkers_actionPerformed(ActionEvent e)
protected void scaleAbove_actionPerformed(ActionEvent e)
{
viewport.setScaleAboveWrapped(scaleAbove.isSelected());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
protected void scaleLeft_actionPerformed(ActionEvent e)
{
viewport.setScaleLeftWrapped(scaleLeft.isSelected());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
protected void scaleRight_actionPerformed(ActionEvent e)
{
viewport.setScaleRightWrapped(scaleRight.isSelected());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
public void viewBoxesMenuItem_actionPerformed(ActionEvent e)
{
viewport.setShowBoxes(viewBoxesMenuItem.isSelected());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
public void viewTextMenuItem_actionPerformed(ActionEvent e)
{
viewport.setShowText(viewTextMenuItem.isSelected());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
protected void renderGapsMenuItem_actionPerformed(ActionEvent e)
{
viewport.setRenderGaps(renderGapsMenuItem.isSelected());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
public FeatureSettings featureSettings;
public void showSeqFeatures_actionPerformed(ActionEvent evt)
{
viewport.setShowSequenceFeatures(showSeqFeatures.isSelected());
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
if (alignPanel.getOverviewPanel() != null)
{
alignPanel.getOverviewPanel().updateOverviewImage();
alignPanel.getOverviewPanel().updateOverviewImage();
}
- alignPanel.repaint();
+
+
+
+ alignPanel.paintAlignment(true);
}
/**
viewport.getAlignment().getSequenceAt(0));
addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder,
viewport.alignment));
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
AlignmentSorter.sortByID(viewport.getAlignment());
addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment));
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
AlignmentSorter.sortByGroup(viewport.getAlignment());
addHistoryItem(new OrderCommand("Group Sort", oldOrder, viewport.alignment));
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
/**
addHistoryItem(new OrderCommand(order.getName(), oldOrder,
viewport.alignment));
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
});
}
oldOrder,
viewport.alignment));
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
});
{
viewport.showSequenceFeatures = true;
showSeqFeatures.setSelected(true);
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
return featuresFile;
viewport.getAlignment(),
0, false);
alignPanel.adjustAnnotationHeight();
- alignPanel.repaint();
+ alignPanel.paintAlignment(true);
}
else
{
{
if (ap != null)
{
- ap.repaint();
+ ap.paintAlignment(true);
}
Thread.sleep(200);
}
if (ap != null)
{
- ap.repaint();
+ ap.paintAlignment(true);
}
}
{
if (ap != null)
{
- ap.repaint();
+ ap.paintAlignment(true);
}
Thread.sleep(200);
if (ap != null)
{
- ap.repaint();
+ ap.paintAlignment(true);
}
}
}
public void hideAllSelectedSeqs()
{
- if (selectionGroup == null)
+ if (selectionGroup == null || selectionGroup.getSize()<1)
{
return;
}
return selection;
}
+ public int [][] getVisibleRegionBoundaries(int min, int max)
+ {
+ Vector regions = new Vector();
+ int start = min;
+ int end = max;
+
+ do
+ {
+ if (hasHiddenColumns)
+ {
+ if (start == 0)
+ {
+ start = colSel.adjustForHiddenColumns(start);
+ }
+
+ end = colSel.getHiddenBoundaryRight(start);
+ if (start == end)
+ {
+ end = max;
+ }
+ if (end > max)
+ {
+ end = max;
+ }
+ }
+
+ regions.addElement(new int[]
+ {start, end});
+
+ if (hasHiddenColumns)
+ {
+ start = colSel.adjustForHiddenColumns(end);
+ start = colSel.getHiddenBoundaryLeft(start) + 1;
+ }
+ }
+ while (end < max);
+
+ int[][] startEnd = new int[regions.size()][2];
+
+ regions.copyInto(startEnd);
+
+ return startEnd;
+
+ }
+
public boolean getShowHiddenMarkers()
{
return showHiddenMarkers;
}\r
}\r
\r
+ public void paintAlignment(boolean updateOverview)\r
+ {\r
+ repaint();\r
+\r
+ if(updateOverview)\r
+ {\r
+ jalview.structure.StructureSelectionManager.getStructureSelectionManager()\r
+ .sequenceColoursChanged(this);\r
+\r
+ if (overviewPanel != null)\r
+ {\r
+ overviewPanel.updateOverviewImage();\r
+ }\r
+ }\r
+ }\r
+\r
/**\r
* DOCUMENT ME!\r
*\r
{\r
setScrollValues(av.getStartRes(), av.getStartSeq());\r
}\r
-\r
- if (this.getVisibleRect().getBounds() == g.getClipBounds()\r
- && overviewPanel != null)\r
- {\r
- overviewPanel.updateOverviewImage();\r
- }\r
}\r
\r
/**\r
\r
return height;\r
}\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @author $author$\r
- * @version $Revision$\r
- */\r
- class Preview\r
- extends JFrame\r
- {\r
- /**\r
- * Creates a new Preview object.\r
- *\r
- * @param image DOCUMENT ME!\r
- */\r
- public Preview(Image image)\r
- {\r
- setResizable(true);\r
- setSize(image.getWidth(this), image.getHeight(this));\r
- setVisible(true);\r
- getContentPane().setLayout(new BorderLayout());\r
- getContentPane().add(new PreviewPanel(image), BorderLayout.CENTER);\r
- validate();\r
- repaint();\r
- }\r
- }\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @author $author$\r
- * @version $Revision$\r
- */\r
- class PreviewPanel\r
- extends JPanel\r
- {\r
- Image image;\r
-\r
- /**\r
- * Creates a new PreviewPanel object.\r
- *\r
- * @param image DOCUMENT ME!\r
- */\r
- public PreviewPanel(Image image)\r
- {\r
- this.image = image;\r
- }\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param g DOCUMENT ME!\r
- */\r
- public void paintComponent(Graphics g)\r
- {\r
- if (image != null)\r
- {\r
- g.drawImage(image, 0, 0, this);\r
- }\r
- else\r
- {\r
- System.out.println("DEBUG:image is null");\r
- }\r
- }\r
- }\r
}\r
jalview.datamodel.AlignmentAnnotation currentAnnotation;\r
boolean adjusting = false;\r
\r
- public AnnotationColourChooser(AlignViewport av, AlignmentPanel ap)\r
+ public AnnotationColourChooser(AlignViewport av, final AlignmentPanel ap)\r
{\r
oldcs = av.getGlobalColourScheme();\r
if (av.alignment.getGroups() != null)\r
}\r
}\r
});\r
+ slider.addMouseListener(new MouseAdapter()\r
+ {\r
+ public void mouseReleased(MouseEvent evt)\r
+ {\r
+ ap.paintAlignment(true);\r
+ }\r
+ });\r
\r
if (av.alignment.getAlignmentAnnotation() == null)\r
{\r
}\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
public void ok_actionPerformed(ActionEvent e)\r
}\r
\r
currentAnnotation.threshold.value = (float) slider.getValue() / 1000f;\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
public void currentColours_actionPerformed(ActionEvent e)\r
ap.annotationPanel.adjustPanelHeight();
ap.annotationScroller.validate();
- ap.repaint();
+ ap.paintAlignment(true);
}
/**
d = ap.annotationSpaceFillerHolder.getPreferredSize();
ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(
d.width, d.height - dif));
- ap.repaint();
+ ap.paintAlignment(true);
}
ap.addNotify();
av.setSelectionGroup(sg);\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
\r
}\r
\r
}\r
graphStretchY = evt.getY();\r
adjustPanelHeight();\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
else\r
{\r
}\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
}\r
}\r
\r
setTableData();\r
- af.alignPanel.repaint();\r
+ af.alignPanel.paintAlignment(true);\r
}\r
catch (Exception ex)\r
{\r
public void updateFeatureRenderer(Object[][] data)\r
{\r
fr.setFeaturePriority(data);\r
- af.alignPanel.repaint();\r
+ af.alignPanel.paintAlignment(true);\r
\r
if (af.alignPanel.overviewPanel != null)\r
{\r
public void stateChanged(ChangeEvent evt)\r
{\r
fr.setTransparency( (float) (100 - transparency.getValue()) / 100f);\r
- af.alignPanel.repaint();\r
+ af.alignPanel.paintAlignment(true);\r
}\r
});\r
\r
{\r
ap.av.antiAlias = smoothFont.isSelected();\r
ap.annotationPanel.image = null;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
/**\r
if (ap != null)\r
{\r
ap.av.setFont(oldFont);\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
else if (tp != null)\r
{\r
*/\r
public class IdPanel\r
extends JPanel implements MouseListener,\r
- MouseMotionListener\r
+ MouseMotionListener, MouseWheelListener\r
{\r
protected IdCanvas idCanvas;\r
protected AlignViewport av;\r
add(idCanvas, BorderLayout.CENTER);\r
addMouseListener(this);\r
addMouseMotionListener(this);\r
+ addMouseWheelListener(this);\r
ToolTipManager.sharedInstance().registerComponent(this);\r
}\r
\r
}\r
\r
lastid = seq;\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+\r
+ public void mouseWheelMoved(MouseWheelEvent e)\r
+ {\r
+ e.consume();\r
+ if (e.getWheelRotation() > 0)\r
+ {\r
+ alignPanel.scrollUp(false);\r
+ }\r
+ else\r
+ {\r
+ alignPanel.scrollUp(true);\r
+ }\r
}\r
\r
/**\r
selectSeq(seq);\r
}\r
\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
}\r
\r
/**\r
running = false;\r
}\r
\r
- alignPanel.repaint();\r
+ alignPanel.paintAlignment(true);\r
\r
try\r
{\r
{\r
ap.idPanel.idCanvas.setPreferredSize(new Dimension(d.width + dif,\r
d.height));\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
oldX = evt.getX();\r
{\r
g.drawImage(miniMe, 0, 0, this);\r
}\r
- else\r
- {\r
- g.setColor(Color.white);\r
- g.fillRect(0, 0, getWidth(), getHeight());\r
- g.setColor(Color.black);\r
- g.setFont(new Font("Verdana", Font.BOLD, 15));\r
- g.drawString("Recalculating", 5, sequencesHeight / 2);\r
- g.drawString("Overview.....", 5, (sequencesHeight / 2) + 20);\r
- }\r
\r
g.setColor(Color.red);\r
g.drawRect(boxX, boxY, boxWidth, boxHeight);\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- new PDBViewer(pdb, sequence, ap.seqPanel.seqCanvas);\r
+\r
+ Vector seqs = new Vector();\r
+ for (int i = 0; i < ap.av.alignment.getHeight(); i++)\r
+ {\r
+ Vector pdbs = ap.av.alignment.getSequenceAt(i).getDatasetSequence().getPDBId();\r
+ if(pdbs==null)\r
+ continue;\r
+\r
+ for(int p=0; p<pdbs.size(); p++)\r
+ {\r
+ PDBEntry p1 = (PDBEntry)pdbs.elementAt(p);\r
+ if(p1.getId().equals(pdb.getId()))\r
+ {\r
+ if (!seqs.contains(ap.av.alignment.getSequenceAt(i)))\r
+ seqs.addElement(ap.av.alignment.getSequenceAt(i));\r
+\r
+ continue;\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+ SequenceI [] seqs2 = new SequenceI[seqs.size()];\r
+ seqs.toArray(seqs2);\r
+\r
+ new AppJMol(pdb, seqs2, ap);\r
}\r
});\r
sequenceMenu.add(menuItem);\r
*/\r
void refresh()\r
{\r
- if (ap.overviewPanel != null)\r
- {\r
- ap.overviewPanel.updateOverviewImage();\r
- }\r
+ ap.paintAlignment(true);\r
\r
PaintRefresher.Refresh(this, ap.av.getSequenceSetId());\r
}\r
}\r
\r
sequence.setName(dialog.getName().replace(' ', '_'));\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
sequence.setDescription(dialog.getDescription());\r
{\r
Object source = e.getSource();\r
SequenceGroup sg = ap.av.getSelectionGroup();\r
- Vector regions = new Vector();\r
+\r
if (sg != null)\r
{\r
- int start = sg.getStartRes();\r
- int end = sg.getEndRes() + 1;\r
-\r
- do\r
- {\r
- if (ap.av.hasHiddenColumns)\r
- {\r
- if (start == 0)\r
- {\r
- start = ap.av.colSel.adjustForHiddenColumns(start);\r
- }\r
-\r
- end = ap.av.colSel.getHiddenBoundaryRight(start);\r
- if (start == end)\r
- {\r
- end = sg.getEndRes() + 1;\r
- }\r
- if (end > sg.getEndRes())\r
- {\r
- end = sg.getEndRes() + 1;\r
- }\r
- }\r
-\r
- regions.addElement(new int[]\r
- {start, end});\r
-\r
- if (ap.av.hasHiddenColumns)\r
- {\r
- start = ap.av.colSel.adjustForHiddenColumns(end);\r
- start = ap.av.colSel.getHiddenBoundaryLeft(start) + 1;\r
- }\r
- }\r
- while (end < sg.getEndRes());\r
-\r
- int[][] startEnd = new int[regions.size()][2];\r
- for (int i = 0; i < regions.size(); i++)\r
- {\r
- startEnd[i] = (int[]) regions.elementAt(i);\r
- }\r
+ int[][] startEnd = ap.av.getVisibleRegionBoundaries(\r
+ sg.getStartRes(), sg.getEndRes() + 1);\r
\r
String description;\r
int caseChange;\r
af.updateEditMenuBar();\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
\r
if (historyList.size() == 0)\r
{\r
{\r
av.showColumn(reveal[0]);\r
reveal = null;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
if (ap.overviewPanel != null)\r
{\r
ap.overviewPanel.updateOverviewImage();\r
{\r
av.showAllHiddenColumns();\r
reveal = null;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
if (ap.overviewPanel != null)\r
{\r
ap.overviewPanel.updateOverviewImage();\r
av.setSelectionGroup(null);\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
if (ap.overviewPanel != null)\r
{\r
ap.overviewPanel.updateOverviewImage();\r
\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
/**\r
\r
if (!stretchingGroup)\r
{\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
\r
return;\r
}\r
}\r
}\r
stretchingGroup = false;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
/**\r
}\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
}\r
\r
setBackground(Color.white);\r
}\r
\r
- MCview.PDBCanvas pdbCanvas;\r
public SequenceRenderer getSequenceRenderer()\r
{\r
return sr;\r
return fr;\r
}\r
\r
- public void setPDBCanvas(MCview.PDBCanvas pc)\r
- {\r
- pdbCanvas = pc;\r
- }\r
-\r
public AlignViewport getViewport()\r
{\r
return av;\r
\r
g.drawImage(img, 0, 0, this);\r
\r
- if (pdbCanvas != null)\r
- {\r
- pdbCanvas.updateSeqColours();\r
- }\r
\r
}\r
\r
import jalview.commands.*;\r
import jalview.datamodel.*;\r
import jalview.schemes.*;\r
+import jalview.structure.*;\r
\r
/**\r
* DOCUMENT ME!\r
*/\r
public class SeqPanel\r
extends JPanel implements MouseListener,\r
- MouseMotionListener, MouseWheelListener\r
+ MouseMotionListener, MouseWheelListener, SequenceListener\r
\r
{\r
/** DOCUMENT ME!! */\r
\r
EditCommand editCommand;\r
\r
+ StructureSelectionManager ssm;\r
+\r
+\r
/**\r
* Creates a new SeqPanel object.\r
*\r
addMouseMotionListener(this);\r
addMouseListener(this);\r
addMouseWheelListener(this);\r
+ ssm = StructureSelectionManager.getStructureSelectionManager();\r
+ ssm.addStructureViewerListener(this);\r
}\r
}\r
\r
\r
void setCursorRow()\r
{\r
- seqCanvas.cursorY = getKeyboardNo(keyboardNo1) - 1;\r
+ seqCanvas.cursorY = getKeyboardNo1() - 1;\r
scrollToVisible();\r
}\r
\r
void setCursorColumn()\r
{\r
- seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1;\r
+ seqCanvas.cursorX = getKeyboardNo1() - 1;\r
scrollToVisible();\r
}\r
\r
}\r
else\r
{\r
- seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1;\r
- seqCanvas.cursorY = getKeyboardNo(keyboardNo2) - 1;\r
+ seqCanvas.cursorX = getKeyboardNo1() - 1;\r
+ seqCanvas.cursorY = getKeyboardNo2() - 1;\r
scrollToVisible();\r
}\r
}\r
(Sequence) av.getAlignment().getSequenceAt(seqCanvas.cursorY);\r
\r
seqCanvas.cursorX = sequence.findIndex(\r
- getKeyboardNo(keyboardNo1) - 1\r
+ getKeyboardNo1() - 1\r
);\r
scrollToVisible();\r
}\r
av.setSelectionGroup(sg);\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
void insertGapAtCursor(boolean group)\r
groupEditing = group;\r
startseq = seqCanvas.cursorY;\r
lastres = seqCanvas.cursorX;\r
- editSequence(true, seqCanvas.cursorX + getKeyboardNo(keyboardNo1));\r
+ editSequence(true, seqCanvas.cursorX + getKeyboardNo1());\r
endEditing();\r
}\r
\r
{\r
groupEditing = group;\r
startseq = seqCanvas.cursorY;\r
- lastres = seqCanvas.cursorX + getKeyboardNo(keyboardNo1);\r
+ lastres = seqCanvas.cursorX + getKeyboardNo1();\r
editSequence(false, seqCanvas.cursorX);\r
endEditing();\r
}\r
}\r
}\r
\r
- int getKeyboardNo(StringBuffer kb)\r
+ int getKeyboardNo1()\r
{\r
- if (kb == null)\r
- {\r
+ if (keyboardNo1 == null)\r
return 1;\r
+ else\r
+ {\r
+ int value = Integer.parseInt(keyboardNo1.toString());\r
+ keyboardNo1 = null;\r
+ return value;\r
}\r
+ }\r
+\r
+ int getKeyboardNo2()\r
+ {\r
+ if (keyboardNo2 == null)\r
+ return 1;\r
else\r
{\r
- return Integer.parseInt(kb.toString());\r
+ int value = Integer.parseInt(keyboardNo2.toString());\r
+ keyboardNo2 = null;\r
+ return value;\r
}\r
}\r
\r
\r
endEditing();\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
/**\r
return;\r
}\r
\r
+ String lastMessage;\r
+ public void mouseOverSequence(SequenceI sequence, int index)\r
+ {\r
+ String tmp = sequence.hashCode()+index+"";\r
+ if (lastMessage == null || !lastMessage.equals(tmp))\r
+ ssm.mouseOverSequence(sequence, index);\r
+\r
+ lastMessage = tmp;\r
+ }\r
+\r
+\r
+ public void highlightSequence(jalview.datamodel.SequenceI seq, int index)\r
+ {\r
+ if(av.alignment.findIndex(seq)>-1)\r
+ {\r
+ SearchResults highlight = new SearchResults();\r
+ highlight.addResult(seq,index,index);\r
+ seqCanvas.highlightSearchResults(highlight);\r
+ }\r
+ }\r
+\r
+ public void updateColours(SequenceI seq, int index)\r
+ {\r
+ System.out.println("update the seqPanel colours");\r
+ //repaint();\r
+ }\r
+\r
/**\r
* DOCUMENT ME!\r
*\r
return;\r
}\r
\r
- if (seqCanvas.pdbCanvas != null && sequence == seqCanvas.pdbCanvas.sequence)\r
- {\r
- seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res));\r
- }\r
+ if (ssm != null)\r
+ mouseOverSequence(sequence, sequence.findPosition(res));\r
\r
setStatusMessage(sequence, res, seq);\r
\r
av.charWidth++;\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
FontMetrics fm = getFontMetrics(av.getFont());\r
{\r
scrollThread.setEvent(evt);\r
}\r
-\r
}\r
\r
+\r
+\r
synchronized void editSequence(boolean insertGap, int startres)\r
{\r
int fixedLeft = -1;\r
public void mouseWheelMoved(MouseWheelEvent e)\r
{\r
e.consume();\r
- /* if (mouseWheelPressed)\r
- {\r
- Font font = av.getFont();\r
- int fontSize = font.getSize();\r
- if (e.getWheelRotation() > 0 && fontSize < 51)\r
- fontSize++;\r
- else if (fontSize > 1)\r
- fontSize--;\r
-\r
-\r
-\r
- av.setFont(new Font(font.getName(), font.getStyle(), fontSize));\r
-\r
- ap.fontChanged();\r
- }\r
- else*/\r
- {\r
if (e.getWheelRotation() > 0)\r
{\r
ap.scrollUp(false);\r
{\r
ap.scrollUp(true);\r
}\r
- }\r
-\r
}\r
\r
/**\r
stretchGroup = null;\r
\r
PaintRefresher.Refresh(this, av.getSequenceSetId());\r
+ ap.paintAlignment(true);\r
}\r
\r
/**\r
* @param forConserve DOCUMENT ME!\r
* @param cs DOCUMENT ME!\r
*/\r
- public SliderPanel(AlignmentPanel ap, int value, boolean forConserve,\r
+ public SliderPanel(final AlignmentPanel ap, int value, boolean forConserve,\r
ColourSchemeI cs)\r
{\r
this.ap = ap;\r
}\r
});\r
\r
+ slider.addMouseListener(new MouseAdapter()\r
+ {\r
+ public void mouseReleased(MouseEvent evt)\r
+ {\r
+ ap.paintAlignment(true);\r
+ }\r
+ });\r
+\r
slider.setValue(value);\r
valueField.setText(value + "");\r
}\r
sg.textColour = col;\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
void colour2Changed(Color col)\r
sg.textColour2 = col;\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
void thresholdChanged(int value)\r
sg.thresholdTextColour = value;\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
void setGroupTextColour()\r
if (seqGroup != null)\r
{\r
seqGroup.cs = ucs;\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
else if (ap != null)\r
{\r
{\r
ap.av.setGlobalColourScheme(oldColourScheme);\r
}\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
if (pdbcanvas != null)\r
if (seq ==\r
af.getViewport().getAlignment().getSequenceAt(index).getDatasetSequence())\r
{\r
- af.alignPanel.repaint();\r
+ af.alignPanel.paintAlignment(true);\r
break;\r
}\r
}\r
}\r
}\r
}\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
\r
}\r
\r