/*
* The MIT License (MIT)
*
* Copyright (c) 2007-2015 Broad Institute
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* MAFConfigurationDialog.java
*
* Created on Feb 19, 2009, 8:59:46 AM
*/
package org.broad.igv.maf;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* NOTE: This is hardcoded for the human 44-way files.
*
* @author jrobinso
*/
public class Multiz44ConfigurationDialog extends AbstractMultipleAlignmentDialog {
enum Category {
Primate, Mammal, Vertebrate
}
;
static String[] primates = {
"panTro2", "gorGor1", "ponAbe2", "rheMac2", "calJac1",
"tarSyr1", "micMur1", "otoGar1"
};
static String[] mammals = {
"tupBel1", "mm9", "rn4", "dipOrd1",
"cavPor3", "speTri1", "oryCun1", "ochPri2", "vicPac1", "turTru1",
"bosTau4", "equCab2", "felCat3", "canFam2", "myoLuc1", "pteVam1",
"eriEur1", "sorAra1", "loxAfr2", "proCap1", "echTel1", "dasNov2",
"choHof1"
};
static String[] vertebrates = {
"monDom4", "ornAna1", "galGal3", "taeGut1", "anoCar1",
"xenTro2", "tetNig1", "fr2", "gasAcu1", "oryLat28", "danRer5", "petMar1"
};
boolean cancelled = false;
MultipleAlignmentTrack track;
/**
* Creates new form MAFConfigurationDialog
*/
public Multiz44ConfigurationDialog(java.awt.Frame parent, boolean modal, MultipleAlignmentTrack track) {
super(parent, modal);
this.track = track;
initComponents();
((SpeciesSelectionPanel) primatePanel).checkForAllSelections();
((SpeciesSelectionPanel) mammalsPanel).checkForAllSelections();
((SpeciesSelectionPanel) vertebratePanel).checkForAllSelections();
}
@Override
public List<String> getSelectedSpecies() {
List<String> selectedSpecies = new ArrayList(44);
selectedSpecies.addAll(((SpeciesSelectionPanel) primatePanel).getSelectedSpecies());
selectedSpecies.addAll(((SpeciesSelectionPanel) mammalsPanel).getSelectedSpecies());
selectedSpecies.addAll(((SpeciesSelectionPanel) vertebratePanel).getSelectedSpecies());
return selectedSpecies;
}
@Override
public boolean isCancelled() {
return cancelled;
}
/**
* 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
primatePanel = new SpeciesSelectionPanel(Category.Primate);
mammalsPanel = new SpeciesSelectionPanel(Category.Mammal);
vertebratePanel = new SpeciesSelectionPanel(Category.Vertebrate);
primateCheckbox = new javax.swing.JCheckBox();
mammalCheckbox = new javax.swing.JCheckBox();
vertebrateCheckbox = new javax.swing.JCheckBox();
jLabel1 = new javax.swing.JLabel();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
primatePanel.setBorder(javax.swing.BorderFactory.createLineBorder(javax.swing.UIManager.getDefaults().getColor("Button.shadow")));
primatePanel.setMaximumSize(new java.awt.Dimension(32767, 60));
primatePanel.setMinimumSize(new java.awt.Dimension(2, 60));
primatePanel.setPreferredSize(new java.awt.Dimension(727, 60));
primatePanel.setLayout(new java.awt.GridLayout(2, 5));
mammalsPanel.setBorder(javax.swing.BorderFactory.createLineBorder(javax.swing.UIManager.getDefaults().getColor("Button.shadow")));
mammalsPanel.setMaximumSize(new java.awt.Dimension(32767, 60));
mammalsPanel.setMinimumSize(new java.awt.Dimension(2, 60));
mammalsPanel.setPreferredSize(new java.awt.Dimension(727, 60));
mammalsPanel.setLayout(new java.awt.GridLayout(6, 5));
vertebratePanel.setBorder(javax.swing.BorderFactory.createLineBorder(javax.swing.UIManager.getDefaults().getColor("Button.shadow")));
vertebratePanel.setMaximumSize(new java.awt.Dimension(32767, 60));
vertebratePanel.setMinimumSize(new java.awt.Dimension(2, 60));
vertebratePanel.setPreferredSize(new java.awt.Dimension(727, 60));
vertebratePanel.setLayout(new java.awt.GridLayout(3, 5));
primateCheckbox.setText("Primates");
primateCheckbox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
primateCheckboxActionPerformed(evt);
}
});
mammalCheckbox.setText("Mammals");
mammalCheckbox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mammalCheckboxActionPerformed(evt);
}
});
vertebrateCheckbox.setText("Verterbrates");
vertebrateCheckbox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
vertebrateCheckboxActionPerformed(evt);
}
});
jLabel1.setFont(new java.awt.Font("Lucida Grande", 0, 18)); // NOI18N
jLabel1.setText("Multiz Species Selection");
okButton.setText("OK");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
cancelButton.setText("Cancel");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(vertebrateCheckbox)
.add(630, 630, 630))
.add(layout.createSequentialGroup()
.add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 293, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(454, Short.MAX_VALUE))
.add(layout.createSequentialGroup()
.add(mammalCheckbox)
.addContainerGap(661, Short.MAX_VALUE))
.add(layout.createSequentialGroup()
.add(primateCheckbox)
.addContainerGap(667, Short.MAX_VALUE))
.add(layout.createSequentialGroup()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
.add(org.jdesktop.layout.GroupLayout.LEADING, vertebratePanel, 0, 0, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.LEADING, mammalsPanel, 0, 0, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.LEADING, primatePanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(layout.createSequentialGroup()
.add(451, 451, 451)
.add(okButton)
.add(18, 18, 18)
.add(cancelButton)))
.addContainerGap())))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 28, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(primateCheckbox)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
.add(primatePanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(46, 46, 46)
.add(mammalCheckbox)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(mammalsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 221, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(28, 28, 28)
.add(vertebrateCheckbox)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(vertebratePanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(34, 34, 34)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(cancelButton)
.add(okButton))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void primateCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primateCheckboxActionPerformed
((SpeciesSelectionPanel) primatePanel).setSelectedAll(primateCheckbox.isSelected());
}//GEN-LAST:event_primateCheckboxActionPerformed
private void mammalCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mammalCheckboxActionPerformed
((SpeciesSelectionPanel) mammalsPanel).setSelectedAll(mammalCheckbox.isSelected());
}//GEN-LAST:event_mammalCheckboxActionPerformed
private void vertebrateCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_vertebrateCheckboxActionPerformed
((SpeciesSelectionPanel) vertebratePanel).setSelectedAll(vertebrateCheckbox.isSelected());
}//GEN-LAST:event_vertebrateCheckboxActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
cancelled = true;
setVisible(false);
}//GEN-LAST:event_cancelButtonActionPerformed
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
setVisible(false);
}//GEN-LAST:event_okButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cancelButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JCheckBox mammalCheckbox;
private javax.swing.JPanel mammalsPanel;
private javax.swing.JButton okButton;
private javax.swing.JCheckBox primateCheckbox;
private javax.swing.JPanel primatePanel;
private javax.swing.JCheckBox vertebrateCheckbox;
private javax.swing.JPanel vertebratePanel;
// End of variables declaration//GEN-END:variables
class SpeciesSelectionPanel extends JPanel {
int nColumns = 4;
String[] speciesIds;
JCheckBox[] checkboxes;
Category category;
public SpeciesSelectionPanel(Category category) {
this.category = category;
switch (category) {
case Primate:
speciesIds = primates;
break;
case Mammal:
speciesIds = mammals;
break;
case Vertebrate:
speciesIds = vertebrates;
break;
}
checkboxes = new JCheckBox[speciesIds.length];
init();
}
private void init() {
Set<String> currentSelections = new HashSet(track.getSelectedSpecies());
// if(currentSelections == null) {
// currentSelections =
// }
int nRows = speciesIds.length / nColumns + 1;
//GridLayout layout = new GridLayout();
//layout.setColumns(nColumns);
//layout.setRows(nRows);
//setLayout(layout);
int height = nRows * 20;
this.setSize(600, height);
this.setMaximumSize(new Dimension(600, height));
for (int i = 0; i < speciesIds.length; i++) {
String sp = speciesIds[i];
String label = track.getSpeciesName(sp);
if (label == null) {
label = sp;
}
checkboxes[i] = new JCheckBox(label);
checkboxes[i].setSelected(currentSelections == null || currentSelections.contains(sp));
checkboxes[i].addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
checkboxAction(evt);
}
});
add(checkboxes[i]);
}
//checkForAllSelections();
}
private void checkboxAction(java.awt.event.ActionEvent evt) {
checkForAllSelections();
}
public void checkForAllSelections() {
JCheckBox masterCheckbox = getMasterCheckbox();
if (isAllSelected()) {
if (!masterCheckbox.isSelected()) {
masterCheckbox.setSelected(true);
}
} else {
if (masterCheckbox.isSelected()) {
masterCheckbox.setSelected(false);
}
}
}
private JCheckBox getMasterCheckbox() {
switch (category) {
case Primate:
return primateCheckbox;
case Mammal:
return mammalCheckbox;
case Vertebrate:
return vertebrateCheckbox;
}
return null;
}
public void setSelectedAll(boolean selected) {
for (JCheckBox cb : checkboxes) {
cb.setSelected(selected);
}
}
private boolean isAllSelected() {
for (JCheckBox cb : checkboxes) {
if (!cb.isSelected()) {
return false;
}
}
return true;
}
public List<String> getSelectedSpecies() {
List<String> selections = new ArrayList(speciesIds.length);
for (int i = 0; i < speciesIds.length; i++) {
if (checkboxes[i].isSelected()) {
selections.add(speciesIds[i]);
}
}
return selections;
}
}
}