/*
* Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
* Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jalview. If not, see .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.gui;
import java.awt.Container;
import java.io.File;
import java.util.List;
import java.util.Map;
import javax.swing.JComponent;
import org.jmol.api.JmolAppConsoleInterface;
import org.openscience.jmol.app.jmolpanel.console.AppConsole;
import jalview.api.AlignmentViewPanel;
import jalview.api.structures.JalviewStructureDisplayI;
import jalview.bin.Cache;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
import jalview.ext.jmol.JalviewJmolBinding;
import jalview.io.DataSourceType;
import jalview.structure.StructureSelectionManager;
import jalview.util.Platform;
import javajs.util.BS;
public class AppJmolBinding extends JalviewJmolBinding
{
public AppJmolBinding(AppJmol appJmol, StructureSelectionManager sSm,
PDBEntry[] pdbentry, SequenceI[][] sequenceIs,
DataSourceType protocol)
{
super(sSm, pdbentry, sequenceIs, protocol);
setViewer(appJmol);
}
@Override
public SequenceRenderer getSequenceRenderer(AlignmentViewPanel alignment)
{
return new SequenceRenderer(((AlignmentPanel) alignment).av);
}
@Override
public void sendConsoleEcho(String strEcho)
{
if (console != null)
{
console.sendConsoleEcho(strEcho);
}
}
@Override
public void sendConsoleMessage(String strStatus)
{
if (console != null && strStatus != null)
// && !strStatus.equals("Script completed"))
// should we squash the script completed string ?
{
console.sendConsoleMessage(strStatus);
}
}
@Override
public void showUrl(String url, String target)
{
try
{
jalview.util.BrowserLauncher.openURL(url);
} catch (Exception e)
{
Cache.log.error("Failed to launch Jmol-associated url " + url, e);
// TODO: 2.6 : warn user if browser was not configured.
}
}
@Override
public void refreshGUI()
{
if (getMappedStructureCount() == 0)
{
// too soon!
return;
}
// appJmolWindow.repaint();
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
JalviewStructureDisplayI theViewer = getViewer();
// invokes colourbySequence() via seqColour_ActionPerformed()
theViewer.updateTitleAndMenus();
((JComponent) theViewer).revalidate();
}
});
}
@Override
public void notifyScriptTermination(String strStatus, int msWalltime)
{
// todo - script termination doesn't happen ?
// if (console != null)
// console.notifyScriptTermination(strStatus,
// msWalltime);
}
@Override
public void showUrl(String url)
{
showUrl(url, "jmol");
}
public void newJmolPopup(String menuName)
{
// jmolpopup = new JmolAwtPopup();
// jmolpopup.jpiInitialize((viewer), menuName);
}
@Override
public void selectionChanged(BS arg0)
{
}
@Override
public void showConsole(boolean b)
{
getViewer().showConsole(b);
}
@Override
protected JmolAppConsoleInterface createJmolConsole(
Container consolePanel, String buttonsToShow)
{
jmolViewer.setJmolCallbackListener(this);
// BH comment: can't do this yet [for JS only, or generally?]
return Platform.isJS() ? null
: new AppConsole(jmolViewer, consolePanel, buttonsToShow);
}
@Override
protected void releaseUIResources()
{
setViewer(null);
closeConsole();
}
@Override
public void releaseReferences(Object svl)
{
if (svl instanceof SeqPanel)
{
getViewer().removeAlignmentPanel(((SeqPanel) svl).ap);
}
}
@Override
public Map getJSpecViewProperty(String arg0)
{
// TODO Auto-generated method stub
return null;
}
@SuppressWarnings("unused")
public void cacheFiles(List files)
{
if (files == null)
{
return;
}
for (File f : files)
{
Platform.cacheFileData(f);
}
}
}