/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
Gephi 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Gephi. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.desktop.statistics;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import org.gephi.statistics.api.StatisticsController;
import org.gephi.statistics.api.StatisticsModel;
import org.gephi.statistics.spi.StatisticsUI;
import org.gephi.ui.components.JSqueezeBoxPanel;
import org.openide.util.Lookup;
/**
*
* @author Mathieu Bastian
*/
public class AvailableStatisticsChooser extends javax.swing.JPanel {
private final JSqueezeBoxPanel squeezeBoxPanel = new JSqueezeBoxPanel();
private final Map<JCheckBox, StatisticsUI> uiMap = new HashMap<JCheckBox, StatisticsUI>();
public AvailableStatisticsChooser() {
initComponents();
metricsPanel.add(squeezeBoxPanel, BorderLayout.CENTER);
}
public void setup(StatisticsModel model, StatisticsCategory[] categories) {
//Sort categories by position
Arrays.sort(categories, new Comparator() {
public int compare(Object o1, Object o2) {
Integer p1 = ((StatisticsCategory) o1).getPosition();
Integer p2 = ((StatisticsCategory) o2).getPosition();
return p1.compareTo(p2);
}
});
//Get UI
StatisticsUI[] statisticsUIs = Lookup.getDefault().lookupAll(StatisticsUI.class).toArray(new StatisticsUI[0]);
for (StatisticsCategory category : categories )
{
MigLayout migLayout = new MigLayout("insets 0 0 0 0");
migLayout.setColumnConstraints("[grow,fill]");
migLayout.setRowConstraints("[min!]");
JPanel innerPanel = new JPanel(migLayout);
//Find uis in this category
List<StatisticsUI> uis = new ArrayList<StatisticsUI>();
for(StatisticsUI sui : statisticsUIs) {
if(sui.getCategory().equals(category.getName())) {
uis.add(sui);
}
}
//Sort it by position
Collections.sort(uis, new Comparator() {
public int compare(Object o1, Object o2) {
Integer p1 = ((StatisticsUI) o1).getPosition();
Integer p2 = ((StatisticsUI) o2).getPosition();
return p1.compareTo(p2);
}});
for(StatisticsUI sui : uis) {
JCheckBox checkBox = new JCheckBox(sui.getDisplayName());
checkBox.setOpaque(false);
checkBox.setSelected(model.isStatisticsUIVisible(sui));
uiMap.put(checkBox, sui);
innerPanel.add(checkBox, "wrap");
}
if(uis.size()>0) {
squeezeBoxPanel.addPanel(innerPanel, category.getName());
}
}
}
public void unsetup() {
//Only called when OK
StatisticsController controller = Lookup.getDefault().lookup(StatisticsController.class);
for(Map.Entry<JCheckBox, StatisticsUI> entry : uiMap.entrySet()) {
controller.setStatisticsUIVisible(entry.getValue(), entry.getKey().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() {
metricsPanel = new javax.swing.JPanel();
metricsPanel.setLayout(new java.awt.BorderLayout());
metricsPanel.setLayout(new java.awt.BorderLayout());
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(metricsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(metricsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 433, Short.MAX_VALUE)
.addContainerGap())
);
add(metricsPanel, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel metricsPanel;
// End of variables declaration//GEN-END:variables
}