Package org.gephi.desktop.statistics

Source Code of org.gephi.desktop.statistics.AvailableStatisticsChooser

/*
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
}
TOP

Related Classes of org.gephi.desktop.statistics.AvailableStatisticsChooser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.