/*
Copyright (C) 2009 Diego Darriba
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package es.uvigo.darwin.xprottest.analysis;
import es.uvigo.darwin.prottest.facade.TreeFacade;
import es.uvigo.darwin.prottest.model.Model;
import es.uvigo.darwin.prottest.util.logging.ProtTestLogger;
import es.uvigo.darwin.prottest.util.printer.ProtTestPrinter;
import es.uvigo.darwin.xprottest.XProtTestView;
import java.awt.Font;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import org.jdesktop.application.Action;
import pal.tree.Tree;
import es.uvigo.darwin.xprottest.util.TextAreaWriter;
/**
*
* @author diego
*/
public class TreeView extends javax.swing.JFrame {
private Tree tree;
private List<Tree> trees;
private TreeFacade facade;
private PrintWriter displayWriter;
private XProtTestView mainFrame;
/** Creates new form TreeView */
public TreeView(XProtTestView mainFrame, TreeFacade facade, Tree tree, Model[] models) {
this.mainFrame = mainFrame;
this.tree = tree;
this.facade = facade;
this.trees = new ArrayList<Tree>(models.length);
initComponents();
displayWriter = new PrintWriter(new TextAreaWriter(displayArea));
Font f = new Font(Font.MONOSPACED, Font.PLAIN, 12);
displayArea.setFont(f);
if (tree != null)
cmbTreeSelection.addItem(new TreeWrapper("Starting Topology", tree));
if (models != null) {
for (Model model : models) {
if (model.getTree() != null) {
cmbTreeSelection.addItem(new TreeWrapper(model.getModelName(), model.getTree()));
trees.add(model.getTree());
}
}
}
if (cmbTreeSelection.getItemCount() > 0)
cmbTreeSelection.setSelectedIndex(0);
treeFormatSelection();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
treeDisplayTypeBtnGroup = new javax.swing.ButtonGroup();
displayScroll = new javax.swing.JScrollPane();
displayArea = new javax.swing.JTextArea();
optionsPanel = new javax.swing.JPanel();
cmbTreeSelection = new javax.swing.JComboBox();
cmbTreeFormatSelection = new javax.swing.JComboBox();
btnExport = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
windowMenu = new javax.swing.JMenu();
closeMenuItem = new javax.swing.JMenuItem();
editMenu = new javax.swing.JMenu();
editCopyMenuItem = new javax.swing.JMenuItem();
editSelectAllMenuItem = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("es/uvigo/darwin/xprottest/analysis/resources/TreeView"); // NOI18N
setTitle(bundle.getString("title")); // NOI18N
setName("Form"); // NOI18N
setResizable(false);
displayScroll.setName("displayScroll"); // NOI18N
displayArea.setColumns(20);
displayArea.setEditable(false);
displayArea.setRows(5);
displayArea.setName("displayArea"); // NOI18N
displayScroll.setViewportView(displayArea);
optionsPanel.setName("optionsPanel"); // NOI18N
javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(TreeView.class, this);
cmbTreeSelection.setAction(actionMap.get("treeFormatSelection")); // NOI18N
cmbTreeSelection.setName("cmbTreeSelection"); // NOI18N
cmbTreeFormatSelection.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Newick Format", "ASCII Format" }));
cmbTreeFormatSelection.setSelectedItem("ASCII Format");
cmbTreeFormatSelection.setAction(actionMap.get("treeFormatSelection")); // NOI18N
cmbTreeFormatSelection.setName("cmbTreeFormatSelection"); // NOI18N
btnExport.setAction(actionMap.get("exportData")); // NOI18N
btnExport.setText("Export to main console"); // NOI18N
btnExport.setName("btnExport"); // NOI18N
javax.swing.GroupLayout optionsPanelLayout = new javax.swing.GroupLayout(optionsPanel);
optionsPanel.setLayout(optionsPanelLayout);
optionsPanelLayout.setHorizontalGroup(
optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(cmbTreeSelection, javax.swing.GroupLayout.PREFERRED_SIZE, 173, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 47, Short.MAX_VALUE)
.addComponent(cmbTreeFormatSelection, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnExport))
);
optionsPanelLayout.setVerticalGroup(
optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cmbTreeSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnExport)
.addComponent(cmbTreeFormatSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jMenuBar1.setName("jMenuBar1"); // NOI18N
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance().getContext().getResourceMap(TreeView.class);
windowMenu.setText(resourceMap.getString("windowMenu.text")); // NOI18N
windowMenu.setName("windowMenu"); // NOI18N
closeMenuItem.setAction(actionMap.get("close")); // NOI18N
closeMenuItem.setName("closeMenuItem"); // NOI18N
windowMenu.add(closeMenuItem);
jMenuBar1.add(windowMenu);
editMenu.setText(resourceMap.getString("editMenu.text")); // NOI18N
editMenu.setName("editMenu"); // NOI18N
editCopyMenuItem.setAction(actionMap.get("editCopy")); // NOI18N
editCopyMenuItem.setName("editCopyMenuItem"); // NOI18N
editMenu.add(editCopyMenuItem);
editSelectAllMenuItem.setAction(actionMap.get("editSelectAll")); // NOI18N
editSelectAllMenuItem.setName("editSelectAllMenuItem"); // NOI18N
editMenu.add(editSelectAllMenuItem);
jMenuBar1.add(editMenu);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(displayScroll, javax.swing.GroupLayout.DEFAULT_SIZE, 527, Short.MAX_VALUE)
.addComponent(optionsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(optionsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(displayScroll, javax.swing.GroupLayout.DEFAULT_SIZE, 451, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void displayAsciiTree(Tree tree) {
displayArea.setText("");
displayArea.setLineWrap(false);
displayWriter.println(facade.toASCII(tree));
displayWriter.println(" ");
displayWriter.println(facade.branchInfo(tree));
displayWriter.println(" ");
displayWriter.println(facade.heightInfo(tree));
}
private void displayNewickTree(Tree tree) {
displayArea.setText("");
displayArea.setLineWrap(true);
String newickTree = facade.toNewick(tree, true, true, false);
displayWriter.println(newickTree);
}
@Action
public void treeFormatSelection() {
Tree displayTree = ((TreeWrapper)cmbTreeSelection.getSelectedItem()).getTree();
if (cmbTreeFormatSelection.getSelectedItem()
.toString().toLowerCase().contains("newick"))
displayNewickTree(displayTree);
else if (cmbTreeFormatSelection.getSelectedItem()
.toString().toLowerCase().contains("ascii"))
displayAsciiTree(displayTree);
}
@Action
public void editCopy() {
displayArea.copy();
}
@Action
public void editSelectAll() {
displayArea.selectAll();
}
@Action
public void close() {
this.setVisible(false);
}
@Action
public void exportData() {
mainFrame.enableHandler();
ProtTestPrinter.printTreeHeader(((TreeWrapper)cmbTreeSelection.getSelectedItem()).toString());
ProtTestLogger.getDefaultLogger().infoln(displayArea.getText());
mainFrame.disableHandler();
}
// @Action
// public void buildConsensus() {
// double threshold = Double.parseDouble(txtThreshold.getText());
//
// if (consensusTrees.containsKey(threshold)) {
// cmbTreeSelection.setSelectedItem(consensusTrees.get(threshold));
// } else {
// Tree consensus = facade.createConsensusTree(trees, threshold);
// TreeWrapper consensusWrapper = new TreeWrapper("Consensus " + threshold, consensus);
// consensusTrees.put(threshold, consensusWrapper);
// cmbTreeSelection.addItem(consensusWrapper);
// cmbTreeSelection.setSelectedItem(consensusWrapper);
// }
// }
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnExport;
private javax.swing.JMenuItem closeMenuItem;
private javax.swing.JComboBox cmbTreeFormatSelection;
private javax.swing.JComboBox cmbTreeSelection;
private javax.swing.JTextArea displayArea;
private javax.swing.JScrollPane displayScroll;
private javax.swing.JMenuItem editCopyMenuItem;
private javax.swing.JMenu editMenu;
private javax.swing.JMenuItem editSelectAllMenuItem;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JPanel optionsPanel;
private javax.swing.ButtonGroup treeDisplayTypeBtnGroup;
private javax.swing.JMenu windowMenu;
// End of variables declaration//GEN-END:variables
}