jflowmap.views.flowstrates.FlowstratesControlPanel.java Source code

Java tutorial

Introduction

Here is the source code for jflowmap.views.flowstrates.FlowstratesControlPanel.java

Source

/*
 * This file is part of JFlowMap.
 *
 * Copyright 2009 Ilya Boyandin
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http:www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jflowmap.views.flowstrates;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import jflowmap.ColorSchemes;
import net.miginfocom.swing.MigLayout;

import com.google.common.collect.Iterables;

/**
 * @author Ilya Boyandin
 */
public class FlowstratesControlPanel extends JPanel {

    private final FlowstratesView view;

    private final JTabbedPane tabbedPane;

    public FlowstratesControlPanel(FlowstratesView view) {
        this.view = view;

        //    setLayout(new MigLayout("insets 0 0 0 0,btt,nogrid", "", ""));
        setLayout(new FlowLayout());
        //    setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

        tabbedPane = new JTabbedPane();
        add(tabbedPane);

        //    addPanel(createFilterPanel());
        addPanel(createDataPanel());
        addPanel(createHeatmapColorsPanel());
        //    addPanel(createFlowLinesPanel());
    }

    private void addPanel(JPanel panel) {
        add(panel);
        panel.setBorder(BorderFactory.createTitledBorder(panel.getName()));

        panel.setBorder(BorderFactory.createEmptyBorder(7, 0, 0, 0));
        tabbedPane.addTab(panel.getName(), panel);

        //    JToolBar tb = new JToolBar(panel.getName());
        //    tb.putClientProperty("JToolBar.isRollover", Boolean.TRUE);
        //    tb.add(panel);
        //    tb.setFloatable(true);
        //    //    tb.addSeparator();

        //    add(tb);
    }

    private JPanel createPanel() {
        return new JPanel(new MigLayout("insets 0 5 0 5", "", ""));
    }

    private JPanel createDataPanel() {
        JPanel panel = createPanel();
        panel.setName("Data");

        //    FlowMapGraphSet fmgs = duoTimelineView.getFlowMapGraph();

        //    panel.add(new JLabel("Attribute:"), "al right");
        //    panel.add(new JComboBox(new Object[] { "r", "rity" }), "height min, width min");

        final JComboBox differencesCombo = new JComboBox(ValueType.values());
        differencesCombo.setSelectedItem(view.getValueType());
        panel.add(differencesCombo, "al right");
        differencesCombo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                view.setValueType((ValueType) differencesCombo.getSelectedItem());
            }
        });

        panel.add(new JLabel("Max rows:"), "gapleft 5, al right"); //
        JComboBox maxRowsCombo = new JComboBox(MaxRowNumValues.values());
        maxRowsCombo.setSelectedItem(MaxRowNumValues.valueOf(view.getMaxVisibleTuples()));
        panel.add(maxRowsCombo, "height min, width min");
        maxRowsCombo.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                view.setMaxVisibleTuples(((MaxRowNumValues) e.getItem()).num);
            }
        });

        panel.add(new JLabel("Group by:"), "al right, gapleft 10");
        JComboBox groupByCombo = new JComboBox(Iterables.toArray(view.getAggLayerNames(), Object.class));
        panel.add(groupByCombo, "height min, width min");
        //    groupByCombo.setEnabled(false);
        groupByCombo.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                view.clearFilters();
                view.setSelectedAggLayer((String) e.getItem());
            }
        });

        //    JButton applyButton = new JButton("Apply");
        //    panel.add(applyButton, "gapleft 10, span, al right, wrap");

        panel.add(new JLabel("Order:"), "gapleft 10, al right");
        JComboBox orderByCombo = new JComboBox(RowOrderings.values());
        orderByCombo.setSelectedItem(view.getRowOrdering());
        panel.add(orderByCombo, "");
        orderByCombo.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                view.setRowOrdering((RowOrderings) e.getItem());
            }
        });
        //    orderByCombo.setEnabled(false);

        return panel;
    }

    private JPanel createFilterPanel() {
        JPanel panel = createPanel();
        panel.setName("Filter by name");

        panel.add(new JLabel("Source:"), "al right");
        final JTextField srcField = new JTextField();
        panel.add(srcField, "growx, wmin 150, gapright 5");

        panel.add(new JLabel("Target:"), "al right");
        final JTextField targetField = new JTextField();
        panel.add(targetField, "growx, wmin 150");

        final DocumentListener docListener = new DocumentListener() {
            @Override
            public void removeUpdate(DocumentEvent e) {
                doFilterBySrcDest(srcField, targetField);
            }

            @Override
            public void insertUpdate(DocumentEvent e) {
                doFilterBySrcDest(srcField, targetField);
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                doFilterBySrcDest(srcField, targetField);
            }
        };
        srcField.getDocument().addDocumentListener(docListener);
        targetField.getDocument().addDocumentListener(docListener);

        view.addPropertyChangeListener(FlowstratesView.Properties.NODE_SELECTION, new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                //        flowstratesView.setCustomEdgeFilter(null);
                srcField.getDocument().removeDocumentListener(docListener);
                targetField.getDocument().removeDocumentListener(docListener);

                srcField.setText("");
                targetField.setText("");

                srcField.getDocument().addDocumentListener(docListener);
                targetField.getDocument().addDocumentListener(docListener);
            }
        });

        JButton clearBut = new JButton("Clear");
        panel.add(clearBut, "gapleft 5");
        clearBut.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                view.setCustomEdgeFilter(null);
                srcField.setText("");
                targetField.setText("");
            }
        });

        //--

        return panel;
    }

    private void doFilterBySrcDest(JTextField srcField, JTextField targetField) {
        view.setCustomEdgeFilter(FlowstratesHeatmapRowFilters.createEdgeFilter_bySrcTargetNamesAsBagOfWords(
                view.getFlowMapGraph(), srcField.getText(), targetField.getText()));
    }

    private JPanel createHeatmapColorsPanel() {
        JPanel panel = createPanel();
        panel.setName("Heatmap colors");

        panel.add(new JLabel("Sequential:"), "al right");
        final JComboBox sequentialCombo = new JComboBox(
                ColorSchemes.ofType(ColorSchemes.Type.SEQUENTIAL).toArray());
        sequentialCombo.setSelectedItem(view.getSequentialColorScheme());
        sequentialCombo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                view.setSequentialColorScheme((ColorSchemes) sequentialCombo.getSelectedItem());
            }
        });
        panel.add(sequentialCombo, "");

        panel.add(new JLabel("Diverging:"), "gapleft 15, al right");
        final JComboBox divergingCombo = new JComboBox(ColorSchemes.ofType(ColorSchemes.Type.DIVERGING).toArray());
        divergingCombo.setSelectedItem(view.getDivergingColorScheme());
        panel.add(divergingCombo, "");
        divergingCombo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                view.setDivergingColorScheme((ColorSchemes) divergingCombo.getSelectedItem());
            }
        });

        final JCheckBox interpolateChk = new JCheckBox("Interpolate", view.getInterpolateColors());
        panel.add(interpolateChk, "gapleft 15");
        interpolateChk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                view.setInterpolateColors(interpolateChk.isSelected());
            }
        });

        //    final JCheckBox focusChk = new JCheckBox("Focus on visible rows",
        //        view.getFocusOnVisibleRows());
        //    panel.add(focusChk, "gapleft 15");
        //    focusChk.setEnabled(true);
        //    focusChk.addActionListener(new ActionListener() {
        //      @Override
        //      public void actionPerformed(ActionEvent e) {
        //        view.setFocusOnVisibleRows(focusChk.isSelected());
        //      }
        //    });

        return panel;
    }

    private JPanel createFlowLinesPanel() {
        JPanel panel = createPanel();
        panel.setName("Flow lines");

        panel.add(new JLabel("Coloring:"), "al right");
        final JComboBox coloringCombo = new JComboBox(FlowLinesColoringMode.values());
        coloringCombo.setSelectedItem(view.getFlowLinesLayerNode().getFlowLinesColoringMode());
        coloringCombo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                view.getFlowLinesLayerNode()
                        .setFlowLinesColoringMode((FlowLinesColoringMode) coloringCombo.getSelectedItem());
            }
        });
        panel.add(coloringCombo, "");

        return panel;
    }

    //  private static JLabel createLabel(String text) {
    //    return new JLabel(text, SwingConstants.LEADING);
    //  }

    //  public static void main(String[] args) {
    //    JFrame frame = new JFrame();
    //    frame.add(new DuoTimelineControlPanel(new DuoTimelineView(null, null)));
    //    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //    frame.setSize(1600, 200);
    //    frame.setLocation(100, 700);
    //    frame.setVisible(true);
    //  }

    private enum MaxRowNumValues {
        _3(3), _5(5), _25(25), _50(50), _100(100), _200(200), _250(250), _500(500), _1000(1000), INFINITY(-1,
                "\u221e");
        final int num;
        final String str;

        private MaxRowNumValues(int num) {
            this(num, Integer.toString(num));
        }

        private MaxRowNumValues(int num, String str) {
            this.num = num;
            this.str = str;
        }

        @Override
        public String toString() {
            return str;
        }

        public static MaxRowNumValues valueOf(int num) {
            for (MaxRowNumValues n : values()) {
                if (n.num == num)
                    return n;
            }
            return null;
        }
    }

}