/*
* Copyright (c) 1998-2012 ChemAxon Ltd. All Rights Reserved.
*
* This software is the confidential and proprietary information of
* ChemAxon. You shall not disclose such Confidential Information
* and shall use it only in accordance with the terms of the agreements
* you entered into with ChemAxon.
*
*/
import java.awt.*;
import javax.swing.*;
import java.util.Properties;
import chemaxon.marvin.plugin.CalculatorPlugin;
import chemaxon.marvin.plugin.CalculatorPluginDisplay;
import chemaxon.marvin.plugin.PluginException;
import chemaxon.struc.Molecule;
/**
* Plugin display for showing selection with statistical data.
*
* @author Nora Mate
*/
public class SelectionPluginDisplay extends CalculatorPluginDisplay {
/** true
if selection molecule display */
private boolean selectionDisplay = true;
/** true
if data display */
private boolean dataDisplay = true;
/**
* Returns true
if results for more molecules can be displayed
* in a single component, false
if each molecule should be displayed
* in a separate component. This implementation returns false
.
* @return false
*/
public boolean isMultipleDisplay() {
return false;
}
/**
* Sets display parameters.
* @param params is the parameter table
*/
public void setParameters(Properties params) {
String str = params.getProperty("display");
if (str != null) {
str = str.toLowerCase();
selectionDisplay = (str.indexOf("selection") != -1);
dataDisplay = (str.indexOf("data") != -1);
} else {
selectionDisplay = true;
dataDisplay = true;
}
}
/**
* Returns the result component for display.
* The component displays pKa values and microspecies distribution chart.
* @return the result component
* @throws PluginException on error
* @since Marvin 4.0
*/
public Component getResultComponent() throws PluginException {
Component comp1 = selectionDisplay ? super.getResultComponent() : null;
Component comp2 = dataDisplay ? getDataComponent() : null;
if (comp1 == null) {
return comp2;
}
if (comp2 == null) {
return comp1;
}
JSplitPane spane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, comp1, comp2);
spane.setOneTouchExpandable(true);
return spane;
}
/**
* Returns the data component.
* @return the data component
*/
private Component getDataComponent() {
SelectionPlugin plugin = (SelectionPlugin) getPlugin();
Molecule mol = plugin.getMolecule();
Molecule sel = plugin.getSelection();
String header = "\t\tMolecule\tSelection\tPercent (%)";
int molatomcount = mol.getAtomCount();
int selatomcount = sel.getAtomCount();
String data1 = "Atom count\t\t"+
molatomcount+"\t"+
selatomcount+"\t"+
plugin.format(100.0*((double)selatomcount)/((double)molatomcount));
String data2 = "";
if (!mol.isReaction() && !sel.isReaction()) {
double molmass = mol.getMass();
double selmass = sel.getMass();
data2 = "Mass\t\t"+
plugin.format(molmass)+"\t"+
plugin.format(selmass)+"\t"+
plugin.format(100.0*selmass/molmass);
}
String text = header+"\n"+data1+"\n"+data2;
JTextArea textArea = new JTextArea(text);
textArea.setEditable(false);
return createScrollPane(textArea);
}
/**
* Returns scroll pane containing the given component,
* sets borders accordingly.
* @param comp is the component
* @return the wrapper scroll pane
*/
static private JScrollPane createScrollPane(JComponent comp) {
comp.setBackground(Color.white);
JScrollPane sp = new JScrollPane(comp);
//sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
int scrollbarwidth = sp.getVerticalScrollBar().getMaximumSize().width;
comp.setBorder(BorderFactory.createEmptyBorder(0,0,0,scrollbarwidth+10));
return sp;
}
}