import jalview.io.*;
import jalview.jbgui.*;
import jalview.schemes.*;
-import jalview.util.ShiftList;
import jalview.commands.*;
import jalview.ws.*;
import java.awt.dnd.*;
/** DOCUMENT ME!! */
public static final int DEFAULT_HEIGHT = 500;
public AlignmentPanel alignPanel;
- AlignViewport viewport;
+ AlignViewport viewport;
Vector alignPanels = new Vector();
al.setDataset(null);
}
- addAlignmentPanel(alignPanel);
+ addAlignmentPanel(alignPanel, true);
init();
}
{
viewport = ap.av;
alignPanel = ap;
- alignPanel.alignFrame = this;
- addAlignmentPanel(ap);
+ addAlignmentPanel(ap, false);
init();
}
AlignViewport newview = new AlignViewport(al);
- AlignmentPanel copy = new AlignmentPanel(af, newview);
-
if(viewport.viewName==null)
viewport.viewName="View 1";
- copy.av.sequenceSetID = viewport.getSequenceSetId();
- copy.av.viewName = "View " +
+ newview.sequenceSetID = viewport.getSequenceSetId();
+ newview.viewName = "View " +
(Desktop.getViewCount(viewport.getSequenceSetId())+1);
+ AlignmentPanel newap = new AlignmentPanel(af, newview);
- addAlignmentPanel(copy);
- PaintRefresher.Register(copy, viewport.getSequenceSetId());
- PaintRefresher.Register(alignPanel,
- viewport.getSequenceSetId());
+ PaintRefresher.Register(newap, viewport.getSequenceSetId());
+ PaintRefresher.Register(alignPanel, viewport.getSequenceSetId());
+ addAlignmentPanel(newap, true);
+ tabbedPane.setSelectedIndex(tabbedPane.getTabCount()-1);
}
break;
case KeyEvent.VK_G:
viewport.startSeq
+ viewport.endSeq - viewport.startSeq);
break;
-
-
}
}
});
}
- public void addAlignmentPanel(final AlignmentPanel ap)
+ public void addAlignmentPanel(final AlignmentPanel ap,
+ boolean newPanel)
{
+ ap.alignFrame = this;
+
alignPanels.addElement(ap);
int aSize = alignPanels.size();
- tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null);
+ tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null);
if (aSize == 1 && ap.av.viewName==null)
{
}
tabbedPane.addTab(ap.av.viewName==null?"Original":ap.av.viewName, ap);
- }
-
- ap.av.updateConsensus(ap);
- ap.av.updateConservation(ap);
+ ap.setVisible(false);
+ }
- ap.av.addPropertyChangeListener(new PropertyChangeListener()
+ if(newPanel)
{
- public void propertyChange(PropertyChangeEvent evt)
- {
- if (evt.getPropertyName().equals("alignment"))
- {
- PaintRefresher.Refresh(ap, ap.av.getSequenceSetId());
- alignmentChanged();
- }
- }
- });
-
+ ap.av.updateConsensus(ap);
+ ap.av.updateConservation(ap);
+ }
}
-
-
public AlignViewport getViewport()
{
return viewport;
{
try
{
- for(int i=0; i<alignPanels.size(); i++)
+ if(alignPanels!=null)
{
- AlignmentPanel ap = (AlignmentPanel)alignPanels.elementAt(i);
- PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas);
- PaintRefresher.RemoveComponent(ap.idPanel.idCanvas);
- PaintRefresher.RemoveComponent(ap);
+ for (int i = 0; i < alignPanels.size(); i++)
+ {
+ AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i);
+ PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas);
+ PaintRefresher.RemoveComponent(ap.idPanel.idCanvas);
+ PaintRefresher.RemoveComponent(ap);
+ }
+ // alignPanels = null;
}
+ else
+ System.out.println("null one here");
+
+ // alignPanel = null;
+ // viewport = null;
this.setClosed(true);
}
catch (Exception ex)
{
+ ex.printStackTrace();
}
}
redoList.push(command);
command.undoCommand();
-
- viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null;
- updateEditMenuBar();
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
+ viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
+ updateEditMenuBar();
+ viewport.firePropertyChange("alignment", null,
+ viewport.getAlignment().getSequences());
}
/**
{
CommandI command = (CommandI) redoList.pop();
historyList.push(command);
- historyList.push(command);
command.doCommand();
viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null;
sequences[i].getEnd());
alignment.addSequence(newseqs[i]);
- PaintRefresher.Refresh(alignPanel,
- alignPanel.av.getSequenceSetId(),
- null,newseqs[i]);
}
-
/*
//ADD HISTORY ITEM
*/
Vector seqs = new Vector();
int cutLength = sg.getEndRes()-sg.getStartRes()+1;
+ boolean seqsCut = false;
SequenceI seq;
for (int i = 0; i < sg.getSize(false); i++)
{
seq = sg.getSequenceAt(i);
seqs.addElement(seq);
if(seq.getLength()<=cutLength)
- PaintRefresher.Refresh(alignPanel,
- alignPanel.av.getSequenceSetId(),
- seq,
- null);
+ seqsCut = true;
}
+
// If the cut affects all sequences, remove highlighted columns
if (sg.getSize(false) == viewport.alignment.getHeight())
{
sg.getEndRes()-sg.getStartRes()+1,
viewport.alignment));
+
viewport.setSelectionGroup(null);
viewport.alignment.deleteGroup(sg);
}
- public void alignmentChanged()
- {
- AlignViewport av;
- AlignmentPanel ap;
-
- for(int i=0; i<alignPanels.size(); i++)
- {
- ap = (AlignmentPanel) alignPanels.elementAt(i);
- av = ap.av;
-
- if (av.padGaps)
- av.getAlignment().padGaps();
-
- if (av.hconsensus != null && av.autoCalculateConsensus)
- {
- av.updateConsensus(ap);
- av.updateConservation(ap);
- ap.annotationPanel.repaint();
- }
-
- resetAllColourSchemes();
-
- av.alignment.adjustSequenceAnnotations();
-
- if (ap.overviewPanel != null)
- ap.overviewPanel.updateOverviewImage();
-
- ap.repaint();
- }
- }
-
- void resetAllColourSchemes()
- {
- ColourSchemeI cs = viewport.globalColourScheme;
- if(cs!=null)
- {
- if (cs instanceof ClustalxColourScheme)
- {
- ( (ClustalxColourScheme) viewport.getGlobalColourScheme()).
- resetClustalX(viewport.alignment.getSequences(),
- viewport.alignment.getWidth());
- }
-
- cs.setConsensus(viewport.hconsensus);
- if (cs.conservationApplied())
- {
- Alignment al = (Alignment) viewport.alignment;
- Conservation c = new Conservation("All",
- ResidueProperties.propHash, 3,
- al.getSequences(), 0,
- al.getWidth() - 1);
- c.calculate();
- c.verdict(false, viewport.ConsPercGaps);
-
- cs.setConservation(c);
- }
- }
-
- int s, sSize = viewport.alignment.getGroups().size();
- for(s=0; s<sSize; s++)
- {
- SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);
- if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)
- {
- ((ClustalxColourScheme)sg.cs).resetClustalX(
- sg.getSequences(true), sg.getWidth());
- }
- sg.recalcConservation();
- }
- }
-
/**
* DOCUMENT ME!
*
*/
public void padGapsMenuitem_actionPerformed(ActionEvent e)
{
- // addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
- // HistoryItem.HIDE));
-
viewport.padGaps = padGapsMenuitem.isSelected();
viewport.firePropertyChange("alignment",
{\r
Vector comps = (Vector) components.get(seqSetId);\r
if(!comps.contains(comp))\r
+ {\r
comps.addElement(comp);\r
+ }\r
}\r
else\r
{\r
\r
public static void Refresh(Component source, String id)\r
{\r
- Refresh( source, id, null, null);\r
+ Refresh( source, id, false, false);\r
}\r
\r
- public static void Refresh(Component source, String id,\r
- SequenceI removeSeq,\r
- SequenceI addSeq)\r
+ public static void Refresh(Component source,\r
+ String id,\r
+ boolean alignmentChanged,\r
+ boolean validateSequences)\r
{\r
if (components == null)\r
return;\r
comp = (Component) e.nextElement();\r
\r
if(comp==source)\r
+ {\r
continue;\r
+ }\r
\r
if (!comp.isValid())\r
{\r
comps.removeElement(comp);\r
}\r
- else if(comp instanceof AlignmentPanel)\r
+ else if(validateSequences\r
+ && comp instanceof AlignmentPanel\r
+ && source instanceof AlignmentPanel )\r
{\r
- AlignmentPanel ap = (AlignmentPanel)comp;\r
- if(addSeq!=null)\r
- ap.av.alignment.addSequence(addSeq);\r
- if(removeSeq!=null)\r
- ap.av.alignment.deleteSequence(removeSeq);\r
-\r
- // if(source instanceof AlignmentPanel)\r
- // ap.av.alignment.setGroups(\r
- // ((AlignmentPanel)source).av.alignment.getGroups() );\r
+ validateSequences( ((AlignmentPanel)source).av.alignment,\r
+ ((AlignmentPanel)comp).av.alignment);\r
+ }\r
\r
+ if(comp instanceof AlignmentPanel && alignmentChanged)\r
+ {\r
+ ((AlignmentPanel)comp).alignmentChanged();\r
}\r
+\r
comp.repaint();\r
}\r
+ }\r
+\r
+ static void validateSequences(AlignmentI source, AlignmentI comp)\r
+ {\r
+ SequenceI[] a1;\r
+ if(source.getHiddenSequences().getSize()>0)\r
+ a1 = source.getHiddenSequences().getFullAlignment().getSequencesArray();\r
+ else\r
+ a1 = source.getSequencesArray();\r
+\r
+ SequenceI[] a2;\r
+ if (comp.getHiddenSequences().getSize() > 0)\r
+ a2 = comp.getHiddenSequences().getFullAlignment().getSequencesArray();\r
+ else\r
+ a2 = comp.getSequencesArray();\r
+\r
+ int i, iSize=a1.length, j, jSize=a2.length;\r
+ boolean exists = false;\r
+ for(i=0; i<iSize; i++)\r
+ {\r
+ exists = false;\r
+\r
+ for(j=0; j<jSize; j++)\r
+ if (a2[j]==a1[i] )\r
+ {\r
+ exists = true;\r
+ break;\r
+ }\r
+\r
+ if(!exists)\r
+ {\r
+ if (i < jSize)\r
+ comp.getSequences().insertElementAt(a1[i], i);\r
+ else\r
+ comp.addSequence(a1[i]);\r
\r
+ jSize++;\r
+\r
+ if (comp.getHiddenSequences().getSize() > 0)\r
+ a2 = comp.getHiddenSequences().getFullAlignment().getSequencesArray();\r
+ else\r
+ a2 = comp.getSequencesArray();\r
+ }\r
+ }\r
+\r
+ iSize=a1.length;\r
+ jSize=a2.length;\r
+\r
+ for(j=0; j<jSize; j++)\r
+ {\r
+ exists = false;\r
+ for(i=0; i<iSize; i++)\r
+ {\r
+ if (a2[j]==a1[i])\r
+ {\r
+ exists = true;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if(!exists)\r
+ {\r
+ comp.deleteSequence(a2[j]);\r
+ }\r
+ }\r
}\r
}\r
/**
- *
+ *
*/
package jalview.gui;
}
try
- {
+ {
//REVERSE ORDER
for (int i = frames.length - 1; i > -1; i--)
{
if (frames[i] instanceof AlignFrame)
{
AlignFrame af = (AlignFrame) frames[i];
- af.alignmentChanged();
+ af.alignPanel.alignmentChanged();
}
}
} catch (Exception e) {
/**
* this will close all windows currently in Jalview.
*
-
+
protected void closeWindows() {
JInternalFrame[] frames = Desktop.desktop.getAllFrames();
}
try
- {
+ {
for (int i = frames.length - 1; i > -1; i--) {
- frames[i].dispose();
+ frames[i].dispose();
}
} catch (Exception e) {
Cache.log.error("Whilst closing windows",e);
}
-
+
}
-
+
public void get_update(VamsasArchive doc) {
// Close windows - load update.
Cache.log.info("Jalview updating from Vamsas Session.");
public void push_update() {
watchForChange=false;
try {
- Thread.sleep(WATCH_SLEEP);
+ Thread.sleep(WATCH_SLEEP);
} catch (Exception e) {
-
+
};
ClientDoc cdoc = getUpdateable();
updateVamsasDocument(cdoc);
if (watcher!=null) {
Thread wthread = new Thread() {
public void run() {
- watcher.run();
+ watcher.run();
}
};
wthread.start();
-
+
}
// collect all uncached alignments and put them into the vamsas dataset.
// store them.
}
public void end_session() {
// stop any update/watcher thread.
- watchForChange=false; // this makes any watch(long) loops return.
- // we should also wait arount for this.WATCH_SLEEP to really make sure the watcher thread has stopped.
+ watchForChange=false; // this makes any watch(long) loops return.
+ // we should also wait arount for this.WATCH_SLEEP to really make sure the watcher thread has stopped.
try {
- Thread.sleep(WATCH_SLEEP);
+ Thread.sleep(WATCH_SLEEP);
} catch (Exception e) {
-
+
};
Cache.log.info("Jalview disconnecting from the Vamsas Session.");
}
public void updateVamsasDocument(ClientDoc doc) {
ensureJvVamsas();
VamsasDatastore vds = new VamsasDatastore(doc, vobj2jv, jv2vobj, baseProvEntry());
- // wander through frames
+ // wander through frames
JInternalFrame[] frames = Desktop.desktop.getAllFrames();
if (frames == null)
}
try
- {
+ {
//REVERSE ORDER
for (int i = frames.length - 1; i > -1; i--)
{
if (frames[i] instanceof AlignFrame)
{
AlignFrame af = (AlignFrame) frames[i];
-
+
// update alignment and root from frame.
vds.storeVAMSAS(af.getViewport(), af.getTitle());
}
}
}
running=false;
-
+
}
-
+
}
public void disableGui(boolean b) {
- Desktop.instance.setVamsasUpdate(b);
+ Desktop.instance.setVamsasUpdate(b);
}
public void startWatcher() {
if (watcher==null)