public PartitionModelPanel(final PartitionSubstitutionModel partitionModel) { super(12, (OSType.isMac() ? 6 : 24)); this.model = partitionModel; initCodonPartitionComponents(); PanelUtils.setupComponent(nucSubstCombo); nucSubstCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setNucSubstitutionModel((NucModelType) nucSubstCombo.getSelectedItem()); } }); nucSubstCombo.setToolTipText("<html>Select the type of nucleotide substitution model.</html>"); PanelUtils.setupComponent(aaSubstCombo); aaSubstCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { AminoAcidModelType type = (AminoAcidModelType) aaSubstCombo.getSelectedItem(); model.setAaSubstitutionModel(type); citationText.setText(type.getCitation().toString()); } }); aaSubstCombo.setToolTipText("<html>Select the type of amino acid substitution model.</html>"); PanelUtils.setupComponent(binarySubstCombo); binarySubstCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setBinarySubstitutionModel((BinaryModelType) binarySubstCombo.getSelectedItem()); useAmbiguitiesTreeLikelihoodCheck.setSelected( binarySubstCombo.getSelectedItem() == BinaryModelType.BIN_COVARION); useAmbiguitiesTreeLikelihoodCheck.setEnabled( binarySubstCombo.getSelectedItem() != BinaryModelType.BIN_COVARION); } }); binarySubstCombo.setToolTipText("<html>Select the type of binary substitution model.</html>"); PanelUtils.setupComponent(useAmbiguitiesTreeLikelihoodCheck); useAmbiguitiesTreeLikelihoodCheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setUseAmbiguitiesTreeLikelihood(useAmbiguitiesTreeLikelihoodCheck.isSelected()); } }); useAmbiguitiesTreeLikelihoodCheck.setToolTipText( "<html>Detemine useAmbiguities in < treeLikelihood > .</html>"); PanelUtils.setupComponent(frequencyCombo); frequencyCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setFrequencyPolicy((FrequencyPolicyType) frequencyCombo.getSelectedItem()); } }); frequencyCombo.setToolTipText( "<html>Select the policy for determining the base frequencies.</html>"); PanelUtils.setupComponent(heteroCombo); heteroCombo.setToolTipText( "<html>Select the type of site-specific rate<br>heterogeneity model.</html>"); heteroCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { boolean gammaHetero = heteroCombo.getSelectedIndex() == 1 || heteroCombo.getSelectedIndex() == 3; model.setGammaHetero(gammaHetero); model.setInvarHetero( heteroCombo.getSelectedIndex() == 2 || heteroCombo.getSelectedIndex() == 3); if (gammaHetero) { gammaCatLabel.setEnabled(true); gammaCatCombo.setEnabled(true); } else { gammaCatLabel.setEnabled(false); gammaCatCombo.setEnabled(false); } if (codingCombo.getSelectedIndex() != 0) { heteroUnlinkCheck.setEnabled(heteroCombo.getSelectedIndex() != 0); heteroUnlinkCheck.setSelected(heteroCombo.getSelectedIndex() != 0); } } }); PanelUtils.setupComponent(gammaCatCombo); gammaCatCombo.setToolTipText( "<html>Select the number of categories to use for<br>the discrete gamma rate heterogeneity model.</html>"); gammaCatCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setGammaCategories(gammaCatCombo.getSelectedIndex() + 4); } }); setYang96Button = new JButton("Use Yang96 model"); setYang96Button.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ev) { setYang96Model(); } }); PanelUtils.setupComponent(setYang96Button); setYang96Button.setToolTipText( "<html>Sets a 3 codon-position model with independent GTR and Gamma as described in<br>" + "Yang (1996) <i>J Mol Evol</i> <b>42</b>: 587–596. This model is named 3' in this paper.</html>"); setSRD06Button = new JButton("Use SRD06 model"); setSRD06Button.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ev) { setSRD06Model(); } }); PanelUtils.setupComponent(setSRD06Button); setSRD06Button.setToolTipText( "<html>Sets the SRD06 model as described in<br>" + "Shapiro, Rambaut & Drummond (2006) <i>MBE</i> <b>23</b>: 7-9.</html>"); citationText = new JTextArea(1, 40); citationText.setLineWrap(true); citationText.setWrapStyleWord(true); citationText.setEditable(false); citationText.setFont(this.getFont()); citationText.setOpaque(false); AminoAcidModelType type = (AminoAcidModelType) aaSubstCombo.getSelectedItem(); citationText.setText(type.getCitation().toString()); dolloCheck.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { if (dolloCheck.isSelected()) { binarySubstCombo.setSelectedIndex(0); binarySubstCombo.setEnabled(false); useAmbiguitiesTreeLikelihoodCheck.setSelected(true); useAmbiguitiesTreeLikelihoodCheck.setEnabled(false); frequencyCombo.setEnabled(false); frequencyCombo.setSelectedItem(FrequencyPolicyType.EMPIRICAL); heteroCombo.setSelectedIndex(0); heteroCombo.setEnabled(false); model.setBinarySubstitutionModel(BinaryModelType.BIN_DOLLO); model.setDolloModel(true); DolloComponentOptions comp = (DolloComponentOptions) model.getOptions().getComponentOptions(DolloComponentOptions.class); comp.createParameters(model.getOptions()); comp.setActive(true); } else { binarySubstCombo.setEnabled(true); useAmbiguitiesTreeLikelihoodCheck.setEnabled(true); frequencyCombo.setEnabled(true); heteroCombo.setEnabled(true); model.setBinarySubstitutionModel( (BinaryModelType) binarySubstCombo.getSelectedItem()); model.setDolloModel(false); } } }); PanelUtils.setupComponent(dolloCheck); // dolloCheck.addChangeListener(new ChangeListener() { // public void stateChanged(ChangeEvent e) { // model.setDolloModel(true); // } // }); dolloCheck.setEnabled(true); dolloCheck.setToolTipText( "<html>Activates a Stochastic Dollo model as described in<br>" + "Alekseyenko, Lee & Suchard (2008) <i>Syst Biol</i> <b>57</b>: 772-784.</html>"); PanelUtils.setupComponent(discreteTraitSiteModelCombo); discreteTraitSiteModelCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setDiscreteSubstType( (DiscreteSubstModelType) discreteTraitSiteModelCombo.getSelectedItem()); } }); PanelUtils.setupComponent(continuousTraitSiteModelCombo); continuousTraitSiteModelCombo.setToolTipText( "<html>Select the model of continuous random walk, either homogenous<br>" + "or relaxed random walk (RRW) with a choice of distributions.</html>"); continuousTraitSiteModelCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setContinuousSubstModelType( (ContinuousSubstModelType) continuousTraitSiteModelCombo.getSelectedItem()); } }); PanelUtils.setupComponent(latLongCheck); latLongCheck.setToolTipText( "<html>Specify whether this is a geographical trait representing <br>" + "latitude and longitude. Provides appropriate statistics to log file.</html>"); latLongCheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setIsLatitudeLongitude(latLongCheck.isSelected()); } }); latLongCheck.setEnabled(false); PanelUtils.setupComponent(useLambdaCheck); useLambdaCheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { ContinuousComponentOptions component = (ContinuousComponentOptions) model.getOptions().getComponentOptions(ContinuousComponentOptions.class); component.setUseLambda(model, useLambdaCheck.isSelected()); } }); useLambdaCheck.setToolTipText( "<html>Estimate degree of phylogenetic correlation in continuous traits using <br>" + "a tree transform. Inspired by Pagel (1999), described in Lemey et al (2013) <i>in prep</i></html>"); PanelUtils.setupComponent(activateBSSVS); activateBSSVS.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setActivateBSSVS(activateBSSVS.isSelected()); } }); activateBSSVS.setToolTipText( "<html>Activates Bayesian stochastic search variable selection on the rates as described in<br>" + "Lemey, Rambaut, Drummond & Suchard (2009) <i>PLoS Computational Biology</i> <b>5</b>: e1000520</html>"); // ============ micro-sat ================ microsatName.setColumns(30); microsatName.addKeyListener( new java.awt.event.KeyListener() { public void keyTyped(KeyEvent e) {} public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) { model.getMicrosatellite().setName(microsatName.getText()); } }); microsatMax.setColumns(10); microsatMax.addKeyListener( new java.awt.event.KeyListener() { public void keyTyped(KeyEvent e) {} public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) { model.getMicrosatellite().setMax(Integer.parseInt(microsatMax.getText())); } }); microsatMin.setColumns(10); microsatMin.addKeyListener( new java.awt.event.KeyListener() { public void keyTyped(KeyEvent e) {} public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) { model.getMicrosatellite().setMin(Integer.parseInt(microsatMin.getText())); } }); PanelUtils.setupComponent(shareMicroSatCheck); shareMicroSatCheck.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { model.getOptions().shareMicroSat = shareMicroSatCheck.isSelected(); if (shareMicroSatCheck.isSelected()) { model.getOptions().shareMicroSat(); } else { model.getOptions().unshareMicroSat(); } setOptions(); } }); PanelUtils.setupComponent(rateProportionCombo); rateProportionCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setRatePorportion( (MicroSatModelType.RateProportionality) rateProportionCombo.getSelectedItem()); } }); // rateProportionCombo.setToolTipText("<html>Select the type of microsatellite substitution // model.</html>"); PanelUtils.setupComponent(mutationBiasCombo); mutationBiasCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setMutationBias( (MicroSatModelType.MutationalBias) mutationBiasCombo.getSelectedItem()); } }); PanelUtils.setupComponent(phaseCombo); phaseCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setPhase((MicroSatModelType.Phase) phaseCombo.getSelectedItem()); } }); setupPanel(); setOpaque(false); }
/** Initializes and binds the components related to modeling codon positions. */ private void initCodonPartitionComponents() { PanelUtils.setupComponent(substUnlinkCheck); substUnlinkCheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setUnlinkedSubstitutionModel(substUnlinkCheck.isSelected()); } }); substUnlinkCheck.setEnabled(false); substUnlinkCheck.setToolTipText( "" + "<html>Gives each codon position partition different<br>" + "substitution model parameters.</html>"); PanelUtils.setupComponent(heteroUnlinkCheck); heteroUnlinkCheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setUnlinkedHeterogeneityModel(heteroUnlinkCheck.isSelected()); } }); heteroUnlinkCheck.setEnabled(heteroCombo.getSelectedIndex() != 0); heteroUnlinkCheck.setToolTipText( "<html>Gives each codon position partition different<br>rate heterogeneity model parameters.</html>"); PanelUtils.setupComponent(freqsUnlinkCheck); freqsUnlinkCheck.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { model.setUnlinkedFrequencyModel(freqsUnlinkCheck.isSelected()); } }); freqsUnlinkCheck.setEnabled(false); freqsUnlinkCheck.setToolTipText( "<html>Gives each codon position partition different<br>nucleotide frequency parameters.</html>"); PanelUtils.setupComponent(codingCombo); codingCombo.setToolTipText("<html>Select how to partition the codon positions.</html>"); codingCombo.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent ev) { switch (codingCombo.getSelectedIndex()) { case 0: model.setCodonHeteroPattern(null); break; case 1: model.setCodonHeteroPattern("112"); break; default: model.setCodonHeteroPattern("123"); break; } if (codingCombo.getSelectedIndex() != 0) { // codon position partitioning substUnlinkCheck.setEnabled(true); heteroUnlinkCheck.setEnabled(heteroCombo.getSelectedIndex() != 3); freqsUnlinkCheck.setEnabled(true); substUnlinkCheck.setSelected(true); heteroUnlinkCheck.setSelected(heteroCombo.getSelectedIndex() != 0); freqsUnlinkCheck.setSelected(true); } else { substUnlinkCheck.setEnabled(false); substUnlinkCheck.setSelected(false); heteroUnlinkCheck.setEnabled(false); heteroUnlinkCheck.setSelected(false); freqsUnlinkCheck.setEnabled(false); freqsUnlinkCheck.setSelected(false); } } }); }
public DataPanel( BeautiFrame parent, Action importDataAction, Action removeDataAction /*, Action importTraitsAction*/) { this.frame = parent; dataTableModel = new DataTableModel(); dataTable = new JTable(dataTableModel); dataTable.getTableHeader().setReorderingAllowed(false); dataTable .getTableHeader() .setDefaultRenderer(new HeaderRenderer(SwingConstants.LEFT, new Insets(0, 4, 0, 4))); TableColumn col = dataTable.getColumnModel().getColumn(5); ComboBoxRenderer comboBoxRenderer = new ComboBoxRenderer(); comboBoxRenderer.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); col.setCellRenderer(comboBoxRenderer); // col = dataTable.getColumnModel().getColumn(5); // comboBoxRenderer = new ComboBoxRenderer(); // comboBoxRenderer.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); // col.setCellRenderer(comboBoxRenderer); col = dataTable.getColumnModel().getColumn(6); comboBoxRenderer = new ComboBoxRenderer(); comboBoxRenderer.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); col.setCellRenderer(comboBoxRenderer); col = dataTable.getColumnModel().getColumn(7); comboBoxRenderer = new ComboBoxRenderer(); comboBoxRenderer.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); col.setCellRenderer(comboBoxRenderer); TableEditorStopper.ensureEditingStopWhenTableLosesFocus(dataTable); dataTable .getSelectionModel() .addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { selectionChanged(); } }); dataTable.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { showAlignment(); } } }); scrollPane = new JScrollPane( dataTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setOpaque(false); JToolBar toolBar1 = new JToolBar(); toolBar1.setFloatable(false); toolBar1.setOpaque(false); toolBar1.setLayout(new BoxLayout(toolBar1, BoxLayout.X_AXIS)); JButton button = new JButton(unlinkModelsAction); unlinkModelsAction.setEnabled(false); PanelUtils.setupComponent(button); toolBar1.add(button); button = new JButton(linkModelsAction); linkModelsAction.setEnabled(false); PanelUtils.setupComponent(button); toolBar1.add(button); toolBar1.addSeparator(); button = new JButton(unlinkClocksAction); unlinkClocksAction.setEnabled(false); PanelUtils.setupComponent(button); toolBar1.add(button); button = new JButton(linkClocksAction); linkClocksAction.setEnabled(false); PanelUtils.setupComponent(button); toolBar1.add(button); toolBar1.addSeparator(); button = new JButton(unlinkTreesAction); unlinkTreesAction.setEnabled(false); PanelUtils.setupComponent(button); toolBar1.add(button); button = new JButton(linkTreesAction); linkTreesAction.setEnabled(false); PanelUtils.setupComponent(button); toolBar1.add(button); // too crowded on the toolbar - just double click to show // button = new JButton(showAction); // showAction.setEnabled(false); // PanelUtils.setupComponent(button); // toolBar1.add(button); ActionPanel actionPanel1 = new ActionPanel(false); actionPanel1.setAddAction(importDataAction); actionPanel1.setRemoveAction(removeDataAction); removeDataAction.setEnabled(false); JPanel controlPanel1 = new JPanel(new FlowLayout(FlowLayout.LEFT)); controlPanel1.setOpaque(false); controlPanel1.add(actionPanel1); controlPanel1.add(new JLabel(" ")); PanelUtils.setupComponent(createImportTraitButton); controlPanel1.add(createImportTraitButton); // controlPanel1.add(new JLabel(" or ")); // // button = new JButton(importTraitsAction); // PanelUtils.setupComponent(button); // controlPanel1.add(button); JPanel panel1 = new JPanel(new BorderLayout()); panel1.setOpaque(false); panel1.add(useStarBEASTCheck, BorderLayout.NORTH); panel1.add(toolBar1, BorderLayout.SOUTH); setOpaque(false); setBorder(new BorderUIResource.EmptyBorderUIResource(new Insets(12, 12, 12, 12))); setLayout(new BorderLayout(0, 0)); add(panel1, BorderLayout.NORTH); add(scrollPane, BorderLayout.CENTER); add(controlPanel1, BorderLayout.SOUTH); useStarBEASTCheck.setEnabled(false); useStarBEASTCheck.setToolTipText(STARBEASTOptions.CITATION); useStarBEASTCheck.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed( ActionEvent e) { // wrong listener Issue 397: *BEAST in BEAUti is broken frame.setupStarBEAST(useStarBEASTCheck.isSelected()); dataTableModel.fireTableDataChanged(); } }); }