/*
* #%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.heatmap.header;
import org.gitools.heatmap.header.HeatmapColoredLabelsHeader;
import org.gitools.heatmap.header.HeatmapDecoratorHeader;
import org.gitools.heatmap.header.HeatmapHeader;
import org.gitools.heatmap.header.HeatmapTextLabelsHeader;
import org.gitools.ui.platform.IconUtils;
import org.gitools.ui.platform.icons.IconNames;
import org.gitools.ui.platform.wizard.AbstractWizardPage;
import javax.swing.*;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;
public class AddHeaderPage extends AbstractWizardPage {
private final static Color SELECTED_BACKGROUND_COLOR = new Color(155, 155, 205);
private class IconListRenderer extends DefaultListCellRenderer {
private Map<Object, ImageIcon> icons = null;
public IconListRenderer(Map<Object, ImageIcon> icons) {
this.icons = icons;
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
// Get the renderer component from parent class
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
// Get icon to use for the list item value
Icon icon = icons.get(value.toString());
// Set icon to display for value
label.setIcon(icon);
if (isSelected) {
setBackground(SELECTED_BACKGROUND_COLOR);
}
return label;
}
}
private static class HeaderType {
private final String title;
private final Class<? extends HeatmapHeader> cls;
public HeaderType(String title, Class<? extends HeatmapHeader> cls) {
this.title = title;
this.cls = cls;
}
public String getTitle() {
return title;
}
public Class<? extends HeatmapHeader> getHeaderClass() {
return cls;
}
@Override
public String toString() {
return title;
}
}
private static final String ANNOTATION_TEXT_LABEL_HEADER = "<html><b>Values as text</b><br> Load values from file and show as a text header</html>";
private static final String ANNOTATION_COLORED_LABEL = "<html><b>Values as color</b><br> Load text values from file and show using a categorical color scale</html>";
public static final String ANNOTATION_HEATMAP = "<html><b>Numeric values</b><br>Load numeric values from file and show using a numeric color scale";
private static final String AGGREGATED_DATA_HEATMAP = "<html><b>Aggregate heatmap values</b><br>Calculate aggregated values from the heatmap and show using a numeric color scale";
/**
* Creates new form AddHeaderDialog
*/
public AddHeaderPage() {
initComponents();
Map<Object, ImageIcon> icons = new HashMap<>();
icons.put(ANNOTATION_TEXT_LABEL_HEADER, IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_ANNOTATION_TEXT_LABEL_HEADER, 60));
icons.put(ANNOTATION_COLORED_LABEL, IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_ANNOTATION_COLORED_LABEL, 60));
icons.put(ANNOTATION_HEATMAP, IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_ANNOTATION_HEATMAP, 60));
icons.put(AGGREGATED_DATA_HEATMAP, IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_AGGREGATED_DATA_HEATMAP, 60));
DefaultListModel model = new DefaultListModel();
model.addElement(new HeaderType(ANNOTATION_TEXT_LABEL_HEADER, HeatmapTextLabelsHeader.class));
model.addElement(new HeaderType(ANNOTATION_COLORED_LABEL, HeatmapColoredLabelsHeader.class));
model.addElement(new HeaderType(ANNOTATION_HEATMAP, HeatmapDecoratorHeader.class));
model.addElement(new HeaderType(AGGREGATED_DATA_HEATMAP, HeatmapDecoratorHeader.class));
headerTypeList.setModel(model);
headerTypeList.setCellRenderer(new IconListRenderer(icons));
headerTypeList.setSelectedIndex(0);
setTitle("Which type of header do you want to add ?");
setComplete(true);
}
public Class<? extends HeatmapHeader> getHeaderClass() {
return ((HeaderType) headerTypeList.getSelectedValue()).getHeaderClass();
}
public String getHeaderTitle() {
return ((HeaderType) headerTypeList.getSelectedValue()).getTitle();
}
/**
* 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() {
optGroup = new javax.swing.ButtonGroup();
jScrollPane1 = new javax.swing.JScrollPane();
headerTypeList = new javax.swing.JList();
jScrollPane1.setViewportView(headerTypeList);
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().addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE).addContainerGap()));
layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE).addContainerGap()));
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JList headerTypeList;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.ButtonGroup optGroup;
// End of variables declaration//GEN-END:variables
}