import jalview.io.FileParse;
import jalview.io.IdentifyFile;
import jalview.io.JnetAnnotationMaker;
+import jalview.javascript.JSFunctionExec;
import jalview.javascript.JsCallBack;
import jalview.structure.SelectionListener;
import jalview.structure.StructureSelectionManager;
import java.util.StringTokenizer;
import java.util.Vector;
+import netscape.javascript.JSObject;
+
/**
* Jalview Applet. Runs in Java 1.18 runtime
*
// The following public methods maybe called
// externally, eg via javascript in HTML page
/**
- * @return String list of selected sequence IDs, each terminated by "¬"
+ * @return String list of selected sequence IDs, each terminated by the 'boolean not' character (""+0x00AC) or
* (¬)
*/
public String getSelectedSequences()
/**
* @param sep
* separator string or null for default
- * @return String list of selected sequence IDs, each terminated by sep or
- * ("¬" as default)
+ * @return String list of selected sequence IDs, each terminated by given separator string
*/
public String getSelectedSequences(String sep)
{
/**
* @param alf
* alignframe containing selection
- * @return String list of selected sequence IDs, each terminated by "¬"
+ * @return String list of selected sequence IDs, each terminated by current default separator sequence
*
*/
public String getSelectedSequencesFrom(AlignFrame alf)
{
- return getSelectedSequencesFrom(alf, "¬");
+ return getSelectedSequencesFrom(alf,separator); // ""+0x00AC);
}
/**
* @param alf
* window containing selection
* @param sep
- * separator string to use - default is "¬"
+ * separator string to use - default is 'boolean not'
* @return String list of selected sequence IDs, each terminated by the given
* separator
*/
StringBuffer result = new StringBuffer("");
if (sep == null || sep.length() == 0)
{
- sep = "¬";
+ sep = separator; // "+0x00AC;
}
if (alf.viewport.getSelectionGroup() != null)
{
/**
*
- * @param sequenceId id of sequence to highlight
- * @param position integer position [ tobe implemented or range ] on sequence
- * @param alignedPosition true/false/empty string - indicate if position is an alignment column or unaligned sequence position
+ * @param sequenceId
+ * id of sequence to highlight
+ * @param position
+ * integer position [ tobe implemented or range ] on sequence
+ * @param alignedPosition
+ * true/false/empty string - indicate if position is an alignment
+ * column or unaligned sequence position
*/
- public void highlight(String sequenceId, String position, String alignedPosition)
+ public void highlight(String sequenceId, String position,
+ String alignedPosition)
{
- highlight(currentAlignFrame, sequenceId, position, alignedPosition);
+ highlightIn(getDefaultTargetFrame(), sequenceId, position, alignedPosition);
}
+
/**
*
- * @param sequenceId id of sequence to highlight
- * @param position integer position [ tobe implemented or range ] on sequence
- * @param alignedPosition false, blank or something else - indicate if position is an alignment column or unaligned sequence position
+ * @param sequenceId
+ * id of sequence to highlight
+ * @param position
+ * integer position [ tobe implemented or range ] on sequence
+ * @param alignedPosition
+ * false, blank or something else - indicate if position is an
+ * alignment column or unaligned sequence position
*/
- public void highlight(AlignFrame alf, String sequenceId, String position, String alignedPosition)
+ public void highlightIn(AlignFrame alf, String sequenceId, String position,
+ String alignedPosition)
{
- SequenceI sq = alf.getAlignViewport().getAlignment().findName(sequenceId);
- if (sq!=null)
+ // TODO: could try to highlight in all alignments if alf==null
+ SequenceI sq = alf.getAlignViewport().getAlignment()
+ .findName(sequenceId);
+ if (sq != null)
{
- int pos, apos=-1;
- try {
+ int pos, apos = -1;
+ try
+ {
apos = new Integer(position).intValue();
apos--;
} catch (NumberFormatException ex)
return;
}
// use vamsas listener to broadcast to all listeners in scope
- if (alignedPosition!=null && (alignedPosition.trim().length()==0 || alignedPosition.toLowerCase().indexOf("false")>-1))
+ if (alignedPosition != null
+ && (alignedPosition.trim().length() == 0 || alignedPosition
+ .toLowerCase().indexOf("false") > -1))
{
- StructureSelectionManager.getStructureSelectionManager().mouseOverVamsasSequence(sq,sq.findIndex(apos));
- } else {
- StructureSelectionManager.getStructureSelectionManager().mouseOverVamsasSequence(sq,apos);
+ StructureSelectionManager.getStructureSelectionManager()
+ .mouseOverVamsasSequence(sq, sq.findIndex(apos));
}
-
+ else
+ {
+ StructureSelectionManager.getStructureSelectionManager()
+ .mouseOverVamsasSequence(sq, apos);
+ }
+
}
}
+
/**
* select regions of the currrent alignment frame
*
- * @param sequenceIds String separated list of sequence ids or empty string
- * @param columns
- * String separated list { column range or column, ..} or empty string
+ * @param sequenceIds
+ * String separated list of sequence ids or empty string
+ * @param columns
+ * String separated list { column range or column, ..} or empty
+ * string
*/
public void select(String sequenceIds, String columns)
{
- select(currentAlignFrame, sequenceIds, columns, "¬");
+ selectIn(getDefaultTargetFrame(), sequenceIds, columns, separator);
}
/**
*/
public void select(String sequenceIds, String columns, String sep)
{
- select(currentAlignFrame, sequenceIds, columns, sep);
+ selectIn(getDefaultTargetFrame(), sequenceIds, columns, sep);
}
/**
* @param sep
* separator between toselect fields
*/
- public void select(AlignFrame alf, String sequenceIds, String columns)
+ public void selectIn(AlignFrame alf, String sequenceIds, String columns)
{
- select(alf, sequenceIds, columns, separator);
+ selectIn(alf, sequenceIds, columns, separator);
}
/**
* @param sep
* separator between toselect fields
*/
- public void select(AlignFrame alf, String sequenceIds, String columns,
+ public void selectIn(AlignFrame alf, String sequenceIds, String columns,
String sep)
{
if (sep == null || sep.length() == 0)
{
sep = separator;
+ } else {
+ if (debug)
+ {
+ System.err.println("Selecting region using separator string '"+separator+"'");
+ }
}
// deparse fields
String[] ids = separatorListToArray(sequenceIds, sep);
*/
public String getSelectedSequencesAsAlignment(String format, String suffix)
{
- return getSelectedSequencesAsAlignmentFrom(currentAlignFrame, format,
+ return getSelectedSequencesAsAlignmentFrom(getDefaultTargetFrame(), format,
suffix);
}
}
}
boolean rprt = false;
- for (int ms=0,msSize=mouseoverListeners.size();ms<msSize;)
+ for (int ms = 0, msSize = mouseoverListeners.size(); ms < msSize;)
{
Object lstn = mouseoverListeners.elementAt(ms);
JsCallBack lstner = (JsCallBack) lstn;
{
System.err.println("Removed listener '" + listener + "'");
}
- } else {
+ }
+ else
+ {
ms++;
}
}
public void stop()
{
- if (mouseoverListeners!=null)
+ if (mouseoverListeners != null)
{
- while (mouseoverListeners.size()>0)
+ while (mouseoverListeners.size() > 0)
{
- Object mol = mouseoverListeners.elementAt(0);
+ Object mol = mouseoverListeners.elementAt(0);
mouseoverListeners.removeElement(mol);
if (mol instanceof SelectionListener)
{
- StructureSelectionManager.getStructureSelectionManager().removeSelectionListener((SelectionListener)mol);
- } else {
- StructureSelectionManager.getStructureSelectionManager().removeStructureViewerListener(mol, null);
+ StructureSelectionManager.getStructureSelectionManager()
+ .removeSelectionListener((SelectionListener) mol);
+ }
+ else
+ {
+ StructureSelectionManager.getStructureSelectionManager()
+ .removeStructureViewerListener(mol, null);
}
}
}
+ jalview.javascript.JSFunctionExec.stopQueue();
}
+
/**
* send a mouseover message to all the alignment windows associated with the
* given residue in the pdbfile
* AlignFrame if the applet is started as embedded on the page and then
* afterwards a new view is created.
*/
- public static AlignFrame currentAlignFrame = null;
+ public AlignFrame currentAlignFrame = null;
/**
* This is the first frame to be displayed, and does not change. API calls
return version;
}
+ // public JSObject scriptObject = null;
+
/**
* init method for Jalview Applet
*/
public void init()
{
// remove any handlers that might be hanging around from an earlier instance
-
+ try
+ {
+ JSObject scriptObject = JSObject.getWindow(this);
+ } catch (Exception ex)
+ {
+ if (debug)
+ {
+ System.err
+ .println("Warning: No JalviewLite javascript callbacks available.");
+ }
+ }
/**
* turn on extra applet debugging
*/
b = 255;
}
}
-
param = getParameter("label");
if (param != null)
{
launcher.setLabel(param);
}
- this.setBackground(new Color(r, g, b));
-
+ setBackground(new Color(r, g, b));
+
file = getParameter("file");
if (file == null)
}
}
- final JalviewLite applet = this;
+ final JalviewLite jvapplet = this;
if (getParameter("embedded") != null
&& getParameter("embedded").equalsIgnoreCase("true"))
{
// Launch as embedded applet in page
embedded = true;
- LoadingThread loader = new LoadingThread(file, applet);
+ LoadingThread loader = new LoadingThread(file, jvapplet);
loader.start();
}
else if (file != null)
{
if (getParameter("showbutton") == null
- || !getParameter("showbutton").equalsIgnoreCase("false"))
+ || !getParameter("showbutton").equalsIgnoreCase(
+ "false"))
{
// Add the JalviewLite 'Button' to the page
add(launcher);
{
public void actionPerformed(ActionEvent e)
{
- LoadingThread loader = new LoadingThread(file, applet);
+ LoadingThread loader = new LoadingThread(file, jvapplet);
loader.start();
}
});
else
{
// Open jalviewLite immediately.
- LoadingThread loader = new LoadingThread(file, applet);
+ LoadingThread loader = new LoadingThread(file, jvapplet);
loader.start();
}
}
// still be called to open new alignments.
file = "NO FILE";
fileFound = false;
+ // callInitCallback();
+ }
+ }
+
+ private void callInitCallback()
+ {
+ String initjscallback = getParameter("oninit");
+ if (initjscallback == null)
+ {
+ return;
+ }
+ initjscallback = initjscallback.trim();
+ if (initjscallback.length() > 0)
+ {
+ JSObject scriptObject = null;
+ try {
+ scriptObject = JSObject.getWindow(this);
+ } catch (Exception ex) {};
+ if (scriptObject != null)
+ {
+ try
+ {
+ // do onInit with the JS executor thread
+ new JSFunctionExec(this).executeJavascriptFunction(true,
+ initjscallback, null, "Calling oninit callback '" + initjscallback
+ + "'.");
+ } catch (Exception e)
+ {
+ System.err.println("Exception when executing _oninit callback '"
+ + initjscallback + "'.");
+ e.printStackTrace();
+ }
+ }
+ else
+ {
+ System.err.println("Not executing _oninit callback '"
+ + initjscallback + "' - no scripting allowed.");
+ }
}
}
if (frame instanceof AlignFrame)
{
((AlignFrame) frame).closeMenuItem_actionPerformed();
- }
- if (currentAlignFrame == frame)
- {
- currentAlignFrame = null;
+ if (((AlignFrame) frame).viewport.applet.currentAlignFrame == frame)
+ {
+ ((AlignFrame) frame).viewport.applet.currentAlignFrame = null;
+ }
}
lastFrameX -= 40;
lastFrameY -= 40;
{
if (frame instanceof AlignFrame)
{
- currentAlignFrame = (AlignFrame) frame;
+ ((AlignFrame) frame).viewport.applet.currentAlignFrame = (AlignFrame) frame;
if (debug)
{
System.err.println("Activated window " + frame);
{
g.setColor(Color.black);
g.setFont(new Font("Arial", Font.BOLD, 24));
- g.drawString("Jalview Applet", 50, this.getSize().height / 2 - 30);
- g.drawString("Loading Data...", 50, this.getSize().height / 2);
+ g.drawString("Jalview Applet", 50, getSize().height / 2 - 30);
+ g.drawString("Loading Data...", 50, getSize().height / 2);
}
}
+ /**
+ * get all components associated with the applet of the given type
+ *
+ * @param class1
+ * @return
+ */
+ public Vector getAppletWindow(Class class1)
+ {
+ Vector wnds = new Vector();
+ Component[] cmp = getComponents();
+ if (cmp != null)
+ {
+ for (int i = 0; i < cmp.length; i++)
+ {
+ if (class1.isAssignableFrom(cmp[i].getClass()))
+ {
+ wnds.addElement(cmp);
+ }
+ }
+ }
+ return wnds;
+ }
class LoadJmolThread extends Thread
{
;
}
startLoading();
+ // applet.callInitCallback();
}
private void startLoading()
if (protocol == jalview.io.AppletFormatAdapter.PASTE)
{
- newAlignFrame.setTitle("Sequences from " + getDocumentBase());
+ newAlignFrame.setTitle("Sequences from "
+ + applet.getDocumentBase());
}
newAlignFrame.statusBar.setText("Successfully loaded file " + file);
}
}
- String param = getParameter("features");
+ String param = applet.getParameter("features");
if (param != null)
{
param = setProtocolState(param);
newAlignFrame.parseFeaturesFile(param, protocol);
}
- param = getParameter("showFeatureSettings");
+ param = applet.getParameter("showFeatureSettings");
if (param != null && param.equalsIgnoreCase("true"))
{
newAlignFrame.viewport.showSequenceFeatures(true);
new FeatureSettings(newAlignFrame.alignPanel);
}
- param = getParameter("annotations");
+ param = applet.getParameter("annotations");
if (param != null)
{
param = setProtocolState(param);
}
- param = getParameter("jnetfile");
+ param = applet.getParameter("jnetfile");
if (param != null)
{
try
do
{
if (pdbFileCount > 0)
- param = getParameter("PDBFILE" + pdbFileCount);
+ param = applet.getParameter("PDBFILE" + pdbFileCount);
else
- param = getParameter("PDBFILE");
+ param = applet.getParameter("PDBFILE");
if (param != null)
{
// modify display of features
//
// hide specific groups
- param = getParameter("hidefeaturegroups");
+ param = applet.getParameter("hidefeaturegroups");
if (param != null)
{
applet.setFeatureGroupStateOn(newAlignFrame, param, false);
}
// show specific groups
- param = getParameter("showfeaturegroups");
+ param = applet.getParameter("showfeaturegroups");
if (param != null)
{
applet.setFeatureGroupStateOn(newAlignFrame, param, true);
else
{
fileFound = false;
- remove(launcher);
- repaint();
+ applet.remove(launcher);
+ applet.repaint();
}
}
{
if (file.indexOf("://") == -1)
{
- file = getCodeBase() + file;
+ file = applet.getCodeBase() + file;
if (debug)
{
System.err.println("Prepended codebase for resource: '" + file
* return null with an error message on System.err indicating the
* fact.
*/
- protected AlignFrame getDefaultTargetFrame()
+ public AlignFrame getDefaultTargetFrame()
{
if (currentAlignFrame != null)
{
/**
* separator used for separatorList
*/
- protected String separator = "|"; // this is a safe(ish) separator - tabs
-
- // don't work for firefox
-
+ protected String separator = ""+((char)0x00AC); // the default used to be '|' but many sequence IDS include pipes.
+
/**
* parse the string into a list
*
}
if (cp < list.length())
{
- jv.addElement(list.substring(cp));
+ String c = list.substring(cp);
+ if (!c.equals(separator))
+ {
+ jv.addElement(c);
+ }
}
if (jv.size() > 0)
{
StringBuffer v = new StringBuffer();
if (list != null && list.length > 0)
{
- for (int i = 0, iSize = list.length - 1; i < iSize; i++)
+ for (int i = 0, iSize = list.length; i < iSize; i++)
{
if (list[i] != null)
{
+ if (i > 0)
+ {
+ v.append(separator);
+ }
v.append(list[i]);
}
- v.append(separator);
- }
- if (list[list.length - 1] != null)
- {
- v.append(list[list.length - 1]);
}
if (debug)
{
* List separator string
*
* @param separator
- * the separator to set
+ * the separator to set. empty string will reset separator to default
*/
public void setSeparator(String separator)
{
+ if (separator==null || separator.length()<1)
+ {
+ // reset to default
+ separator = ""+((char)0x00AC);
+ }
this.separator = separator;
+ if (debug)
+ {
+ System.err.println("Default Separator now: '"+separator+"'");
+ }
}
/**
return alignPdbStructures;
}
- /**
- * get all components associated with the applet of the given type
- *
- * @param class1
- * @return
- */
- public Vector getAppletWindow(Class class1)
+ public void start()
{
- Vector wnds = new Vector();
- Component[] cmp = getComponents();
- if (cmp != null)
- {
- for (int i = 0; i < cmp.length; i++)
- {
- if (class1.isAssignableFrom(cmp[i].getClass()))
- {
- wnds.addElement(cmp);
- }
- }
- }
- return wnds;
+ callInitCallback();
}
/**