/* * TreesPanel.java * * Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard * * This file is part of BEAST. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership and licensing. * * BEAST is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * BEAST 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with BEAST; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ package dr.app.bss; import jam.framework.Exportable; import jam.panels.ActionPanel; import jam.table.TableRenderer; import java.awt.BorderLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.TableColumn; /** * @author Filip Bielejec * @version $Id$ */ @SuppressWarnings("serial") public class TreesPanel extends JPanel implements Exportable { private PartitionDataList dataList; private MainFrame frame; private JTable treesTable = null; private TreesTableModel treesTableModel = null; private JScrollPane scrollPane; private TableColumn column; private int rowCount; private Action addTreeAction = new AbstractAction("+") { public void actionPerformed(ActionEvent ae) { treesTableModel.addDefaultRow(); setTrees(); }// END: actionPerformed }; private Action removeTreeAction = new AbstractAction("-") { public void actionPerformed(ActionEvent ae) { if (rowCount > 1) { treesTableModel.deleteRow(rowCount - 1); frame.fireTaxaChanged(); setTrees(); } }// END: actionPerformed }; public TreesPanel(MainFrame frame, PartitionDataList dataList) { this.frame = frame; this.dataList = dataList; treesTable = new JTable(); treesTable.getTableHeader().setReorderingAllowed(false); treesTable.addMouseListener(new JTableButtonMouseListener(treesTable)); treesTableModel = new TreesTableModel(this.dataList, this.frame); treesTable.setModel(treesTableModel); setLayout(new BorderLayout()); scrollPane = new JScrollPane(treesTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); RowNumberTable rowNumberTable = new RowNumberTable(treesTable); scrollPane.setRowHeaderView(rowNumberTable); scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, rowNumberTable.getTableHeader()); scrollPane.getViewport().setOpaque(false); add(scrollPane, BorderLayout.CENTER); setTreesColumn(this.dataList); setTaxaSetColumn(this.dataList); column = treesTable.getColumnModel().getColumn( TreesTableModel.TAXA_COUNT_INDEX); column.setCellRenderer(new TableRenderer(SwingConstants.LEFT, new Insets(0, 2, 0, 2))); ActionPanel actionPanel = new ActionPanel(false); actionPanel.setAddAction(addTreeAction); actionPanel.setRemoveAction(removeTreeAction); add(actionPanel, BorderLayout.SOUTH); setTrees(); }// END: Constructor private void setTaxaSetColumn(PartitionDataList dataList) { column = treesTable.getColumnModel().getColumn( TreesTableModel.TAXA_SET_INDEX); // pass dataList for labels on buttons column.setCellRenderer(new JTableButtonCellRenderer( dataList,TreesTableModel.TAXA_SET_INDEX )); column.setCellEditor(new JTableButtonCellEditor()); } private void setTreesColumn(PartitionDataList dataList) { column = treesTable.getColumnModel().getColumn( TreesTableModel.TREE_FILE_INDEX); // pass dataList for labels on buttons column.setCellRenderer(new JTableButtonCellRenderer(dataList, TreesTableModel.TREE_FILE_INDEX)); column.setCellEditor(new JTableButtonCellEditor()); }// END: setTreesColumn private void setTrees() { rowCount = dataList.recordsList.size(); addTreeAction.setEnabled(true); if (rowCount == 1) { removeTreeAction.setEnabled(false); } else { removeTreeAction.setEnabled(true); } ColumnResizer.adjustColumnPreferredWidths(treesTable); }// END: setPartitions public void updateTreesTable(PartitionDataList dataList) { treesTableModel.setDataList(dataList); setDataList(dataList); setTreesColumn(dataList); setTaxaSetColumn(dataList); setTrees(); fireTableDataChanged(); }// END: updateTreesTable public void fireTableDataChanged() { treesTableModel.fireTableDataChanged(); } public void setDataList(PartitionDataList dataList) { this.dataList = dataList; } @Override public JComponent getExportableComponent() { return this; }// END: getExportableComponent }// END: class