Package org.gephi.visualization.component

Source Code of org.gephi.visualization.component.LabelAttributesPanel

/*
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.visualization.component;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.ButtonModel;
import javax.swing.JCheckBox;
import net.miginfocom.swing.MigLayout;
import org.gephi.data.attributes.api.AttributeColumn;
import org.gephi.data.attributes.api.AttributeController;
import org.gephi.data.attributes.api.AttributeOrigin;
import org.gephi.visualization.opengl.text.TextModel;
import org.openide.util.Lookup;

/**
*
* @author Mathieu Bastian
*/
public class LabelAttributesPanel extends javax.swing.JPanel {

    //Settings
    private ButtonModel selectedModel;
    private boolean showProperties = true;
    //Model
    private TextModel textModel;
    private AttributesCheckBox[] nodeCheckBoxs;
    private AttributesCheckBox[] edgeCheckBoxs;

    /** Creates new form LabelAttributesPanel */
    public LabelAttributesPanel() {
        initComponents();
        selectedModel = nodesToggleButton.getModel();
        elementButtonGroup.setSelected(selectedModel, true);
        nodesToggleButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (nodesToggleButton.isSelected()) {
                    selectedModel = nodesToggleButton.getModel();
                    refresh();
                }
            }
        });
        edgesToggleButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (edgesToggleButton.isSelected()) {
                    selectedModel = edgesToggleButton.getModel();
                    refresh();
                }
            }
        });
        showPropertiesCheckbox.setSelected(showProperties);
        showPropertiesCheckbox.addItemListener(new ItemListener() {

            public void itemStateChanged(ItemEvent e) {
                showProperties = showPropertiesCheckbox.isSelected();
                refresh();
            }
        });
    }

    public void setup(TextModel model) {
        this.textModel = model;
        refresh();
    }

    private void refresh() {
        AttributeController attributeController = Lookup.getDefault().lookup(AttributeController.class);

        List<AttributeColumn> availableColumns = new ArrayList<AttributeColumn>();
        List<AttributeColumn> selectedColumns = new ArrayList<AttributeColumn>();
        AttributesCheckBox[] target;
        if (elementButtonGroup.getSelection() == nodesToggleButton.getModel()) {
            for (AttributeColumn c : attributeController.getModel().getNodeTable().getColumns()) {
                if (showProperties || c.getOrigin().equals(AttributeOrigin.DATA)) {
                    availableColumns.add(c);
                }
            }

            if (textModel.getNodeTextColumns() != null) {
                selectedColumns = Arrays.asList(textModel.getNodeTextColumns());
            }
            nodeCheckBoxs = new AttributesCheckBox[availableColumns.size()];
            target = nodeCheckBoxs;
        } else {
            for (AttributeColumn c : attributeController.getModel().getEdgeTable().getColumns()) {
                if (showProperties || c.getOrigin().equals(AttributeOrigin.DATA)) {
                    availableColumns.add(c);
                }
            }

            if (textModel.getEdgeTextColumns() != null) {
                selectedColumns = Arrays.asList(textModel.getEdgeTextColumns());
            }
            edgeCheckBoxs = new AttributesCheckBox[availableColumns.size()];
            target = edgeCheckBoxs;
        }
        contentPanel.removeAll();
        contentPanel.setLayout(new MigLayout("", "[pref!]"));
        for (int i = 0; i < availableColumns.size(); i++) {
            AttributeColumn column = availableColumns.get(i);
            AttributesCheckBox c = new AttributesCheckBox(column, selectedColumns.contains(column));
            target[i] = c;
            contentPanel.add(c.getCheckBox(), "wrap");
        }
        contentPanel.revalidate();
        contentPanel.repaint();
    }

    public void unsetup() {
        List<AttributeColumn> nodeColumnsList = new ArrayList<AttributeColumn>();
        List<AttributeColumn> edgeColumnsList = new ArrayList<AttributeColumn>();
        if (nodeCheckBoxs != null) {
            for (AttributesCheckBox c : nodeCheckBoxs) {
                if (c.isSelected()) {
                    nodeColumnsList.add(c.getColumn());
                }
            }
        }
        if (edgeCheckBoxs != null) {
            for (AttributesCheckBox c : edgeCheckBoxs) {
                if (c.isSelected()) {
                    edgeColumnsList.add(c.getColumn());
                }
            }
        }
        if (edgeColumnsList.size() > 0 || nodeColumnsList.size() > 0) {
            textModel.setTextColumns(nodeColumnsList.toArray(new AttributeColumn[0]), edgeColumnsList.toArray(new AttributeColumn[0]));
        }
    }

    /** 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() {
        java.awt.GridBagConstraints gridBagConstraints;

        elementButtonGroup = new javax.swing.ButtonGroup();
        controlPanel = new javax.swing.JPanel();
        nodesToggleButton = new javax.swing.JToggleButton();
        edgesToggleButton = new javax.swing.JToggleButton();
        contentScrollPane = new javax.swing.JScrollPane();
        contentPanel = new javax.swing.JPanel();
        labelComment = new javax.swing.JLabel();
        showPropertiesCheckbox = new javax.swing.JCheckBox();

        controlPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));

        elementButtonGroup.add(nodesToggleButton);
        nodesToggleButton.setText(org.openide.util.NbBundle.getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.nodesToggleButton.text")); // NOI18N
        controlPanel.add(nodesToggleButton);

        elementButtonGroup.add(edgesToggleButton);
        edgesToggleButton.setText(org.openide.util.NbBundle.getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.edgesToggleButton.text")); // NOI18N
        controlPanel.add(edgesToggleButton);

        contentPanel.setLayout(new java.awt.GridLayout());
        contentScrollPane.setViewportView(contentPanel);

        labelComment.setText(org.openide.util.NbBundle.getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.labelComment.text")); // NOI18N

        showPropertiesCheckbox.setText(org.openide.util.NbBundle.getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.showPropertiesCheckbox.text")); // NOI18N
        showPropertiesCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        showPropertiesCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
        showPropertiesCheckbox.setMargin(new java.awt.Insets(2, 2, 2, 0));

        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)
                    .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 313, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(controlPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 94, Short.MAX_VALUE)
                        .addComponent(showPropertiesCheckbox))
                    .addComponent(labelComment))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(controlPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(13, 13, 13)
                        .addComponent(labelComment))
                    .addComponent(showPropertiesCheckbox))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel contentPanel;
    private javax.swing.JScrollPane contentScrollPane;
    private javax.swing.JPanel controlPanel;
    private javax.swing.JToggleButton edgesToggleButton;
    private javax.swing.ButtonGroup elementButtonGroup;
    private javax.swing.JLabel labelComment;
    private javax.swing.JToggleButton nodesToggleButton;
    private javax.swing.JCheckBox showPropertiesCheckbox;
    // End of variables declaration//GEN-END:variables

    private static class AttributesCheckBox {

        private JCheckBox checkBox;
        private AttributeColumn column;

        public AttributesCheckBox(AttributeColumn column, boolean selected) {
            checkBox = new JCheckBox(column.getTitle(), selected);
            this.column = column;
        }

        public void setSelected(boolean selected) {
            checkBox.setSelected(selected);
        }

        public boolean isSelected() {
            return checkBox.isSelected();
        }

        public JCheckBox getCheckBox() {
            return checkBox;
        }

        public AttributeColumn getColumn() {
            return column;
        }
    }
}
TOP

Related Classes of org.gephi.visualization.component.LabelAttributesPanel

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.