/* * #%L * gitools-ui-app * %% * Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group * %% * 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 3 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, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ package org.gitools.ui.app.sort; import org.gitools.api.matrix.MatrixDimensionKey; import org.gitools.api.matrix.SortDirection; import org.gitools.heatmap.Heatmap; import org.gitools.ui.core.Application; import org.gitools.ui.core.pages.common.PatternSourcePage; import org.gitools.ui.core.utils.DocumentChangeListener; import org.gitools.ui.platform.wizard.AbstractWizardPage; import org.gitools.ui.platform.wizard.PageDialog; import javax.swing.*; import javax.swing.event.DocumentEvent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import static org.gitools.api.matrix.MatrixDimensionKey.COLUMNS; import static org.gitools.api.matrix.MatrixDimensionKey.ROWS; public class AnnotationSortPage extends AbstractWizardPage { private final Heatmap hm; private String rowsPat; private String colsPat; public AnnotationSortPage(Heatmap hm, MatrixDimensionKey dim) { this.hm = hm; initComponents(); rowsLabelFld.setText("id"); rowsPat = "${id}"; colsLabelFld.setText("id"); colsPat = "${id}"; ActionListener dimListener = new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { dimChanged(); } }; rowsChk.addActionListener(dimListener); colsChk.addActionListener(dimListener); rowsLabelFld.getDocument().addDocumentListener(new DocumentChangeListener() { @Override protected void update(DocumentEvent e) { updateComplete(); } }); rowsLabelBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { selectRowsPattern(); } }); rowsDirCb.setModel(new DefaultComboBoxModel(SortDirection.values())); colsLabelFld.getDocument().addDocumentListener(new DocumentChangeListener() { @Override protected void update(DocumentEvent e) { updateComplete(); } }); colsLabelBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { selectColsPattern(); } }); colsDirCb.setModel(new DefaultComboBoxModel(SortDirection.values())); if (dim == COLUMNS) { colsChk.setSelected(true); rowsChk.setSelected(false); dimChanged(); rowsChk.setEnabled(false); } else if (dim == ROWS) { colsChk.setSelected(false); rowsChk.setSelected(true); dimChanged(); colsChk.setEnabled(false); } setTitle("Sort by header annotation"); updateComplete(); } @Override public void updateControls() { dimChanged(); } private void updateComplete() { setComplete((rowsChk.isSelected() || colsChk.isSelected()) && !((rowsChk.isSelected() && rowsLabelFld.getText().isEmpty()) || (colsChk.isSelected() && colsLabelFld.getText().isEmpty()))); } private void dimChanged() { boolean rs = rowsChk.isSelected(); rowsLabelFld.setEnabled(rs); rowsLabelBtn.setEnabled(rs); rowsDirCb.setEnabled(rs); numericRowsCb.setEnabled(rs); boolean cs = colsChk.isSelected(); colsLabelFld.setEnabled(cs); colsLabelBtn.setEnabled(cs); colsDirCb.setEnabled(cs); numericColumnsCb.setEnabled(cs); updateComplete(); } private void selectRowsPattern() { PatternSourcePage page = new PatternSourcePage(hm.getRows(), true); PageDialog dlg = new PageDialog(Application.get(), page); dlg.setVisible(true); if (dlg.isCancelled()) { return; } rowsPat = page.getPattern(); rowsLabelFld.setText(page.getPatternTitle()); } private void selectColsPattern() { PatternSourcePage page = new PatternSourcePage(hm.getColumns(), true); PageDialog dlg = new PageDialog(Application.get(), page); dlg.setVisible(true); if (dlg.isCancelled()) { return; } colsPat = page.getPattern(); colsLabelFld.setText(page.getPatternTitle()); } public boolean isApplyToRowsSelected() { return rowsChk.isSelected(); } public String getRowsPattern() { return rowsPat; } public SortDirection getRowsDirection() { return (SortDirection) rowsDirCb.getSelectedItem(); } public boolean getRowsNumeric() { return numericRowsCb.isSelected() && rowsChk.isSelected(); } public boolean isApplyToColumnsSelected() { return colsChk.isSelected(); } public String getColumnsPattern() { return colsPat; } public SortDirection getColumnsDirection() { return (SortDirection) colsDirCb.getSelectedItem(); } public boolean getColumnsNumeric() { return numericColumnsCb.isSelected() && colsChk.isSelected(); } /** * 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() { jLabel1 = new javax.swing.JLabel(); rowsDirCb = new javax.swing.JComboBox(); rowsChk = new javax.swing.JCheckBox(); rowsLabelFld = new javax.swing.JTextField(); rowsLabelBtn = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); colsChk = new javax.swing.JCheckBox(); jLabel3 = new javax.swing.JLabel(); colsLabelFld = new javax.swing.JTextField(); colsLabelBtn = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); colsDirCb = new javax.swing.JComboBox(); numericColumnsCb = new javax.swing.JCheckBox(); numericRowsCb = new javax.swing.JCheckBox(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel1.setText("Direction"); rowsChk.setSelected(true); rowsChk.setText("Rows"); rowsLabelFld.setEditable(false); rowsLabelBtn.setText("Change..."); jLabel2.setText("Label"); colsChk.setText("Columns"); jLabel3.setText("Label"); colsLabelFld.setEditable(false); colsLabelBtn.setText("Change..."); jLabel4.setText("Direction"); numericColumnsCb.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { numericColumnsCbActionPerformed(evt); } }); numericRowsCb.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); numericRowsCb.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { numericRowsCbActionPerformed(evt); } }); jLabel5.setText("Numeric"); jLabel6.setText("Numeric"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(12, 12, 12).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel1).addComponent(jLabel2).addComponent(jLabel6)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(rowsLabelFld, javax.swing.GroupLayout.DEFAULT_SIZE, 367, Short.MAX_VALUE).addComponent(rowsDirCb, javax.swing.GroupLayout.Alignment.LEADING, 0, 367, Short.MAX_VALUE))).addGroup(layout.createSequentialGroup().addComponent(rowsChk).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 397, Short.MAX_VALUE))).addGap(26, 26, 26).addComponent(rowsLabelBtn)).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(colsChk).addGroup(layout.createSequentialGroup().addGap(11, 11, 11).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel4).addComponent(jLabel3).addComponent(jLabel5)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(numericColumnsCb, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(colsLabelFld, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 368, Short.MAX_VALUE).addComponent(colsDirCb, javax.swing.GroupLayout.Alignment.LEADING, 0, 368, Short.MAX_VALUE)).addComponent(numericRowsCb, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))))).addGap(26, 26, 26).addComponent(colsLabelBtn))).addContainerGap())); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(rowsChk).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel2).addComponent(rowsLabelFld, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(rowsLabelBtn)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1).addComponent(rowsDirCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addGroup(layout.createSequentialGroup().addComponent(jLabel6).addGap(34, 34, 34).addComponent(colsChk).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)).addGroup(layout.createSequentialGroup().addComponent(numericRowsCb, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(63, 63, 63))).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel3).addComponent(colsLabelFld, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(colsLabelBtn)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel4).addComponent(colsDirCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addGroup(layout.createSequentialGroup().addComponent(jLabel5).addGap(34, 34, 34)).addGroup(layout.createSequentialGroup().addComponent(numericColumnsCb, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(29, 29, 29))))); }// </editor-fold>//GEN-END:initComponents private void numericRowsCbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numericRowsCbActionPerformed // TODO add your handling code here: }//GEN-LAST:event_numericRowsCbActionPerformed private void numericColumnsCbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numericColumnsCbActionPerformed // TODO add your handling code here: }//GEN-LAST:event_numericColumnsCbActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBox colsChk; private javax.swing.JComboBox colsDirCb; private javax.swing.JButton colsLabelBtn; private javax.swing.JTextField colsLabelFld; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JCheckBox numericColumnsCb; private javax.swing.JCheckBox numericRowsCb; private javax.swing.JCheckBox rowsChk; private javax.swing.JComboBox rowsDirCb; private javax.swing.JButton rowsLabelBtn; private javax.swing.JTextField rowsLabelFld; // End of variables declaration//GEN-END:variables }