Package org.gephi.desktop.filters

Source Code of org.gephi.desktop.filters.FiltersPanel$QueriesPanel

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

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.desktop.filters.library.FiltersExplorer;
import org.gephi.desktop.filters.query.QueryExplorer;
import org.gephi.filters.api.FilterController;
import org.gephi.filters.api.FilterModel;
import org.gephi.filters.api.Query;
import org.gephi.ui.utils.UIUtils;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.explorer.ExplorerManager;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;

/**
*
* @author Mathieu Bastian
*/
public class FiltersPanel extends javax.swing.JPanel implements ExplorerManager.Provider, ChangeListener {

    private ExplorerManager manager = new ExplorerManager();
    //Models
    private FilterModel filterModel;
    private FilterUIModel uiModel;
    //Components
    private FilterPanelPanel filterPanelPanel;
    private QueryExplorer queriesExplorer;
    private QueriesPanel queriesPanel;

    public FiltersPanel() {
        initComponents();
        //Toolbar
        Border b = (Border) UIManager.get("Nb.Editor.Toolbar.border"); //NOI18N
        toolbar.setBorder(b);
        if (UIUtils.isAquaLookAndFeel()) {
            toolbar.setBackground(UIManager.getColor("NbExplorerView.background"));
            setBackground(UIManager.getColor("NbExplorerView.background"));
        }

        //Components
        queriesPanel = new QueriesPanel();
        southPanel.add(queriesPanel, BorderLayout.CENTER);
        filterPanelPanel = new FilterPanelPanel();
        filtersUIPanel.add(filterPanelPanel);

        initEvents();
    }

    private void initEvents() {
        resetButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                for (Query query : filterModel.getQueries()) {
                    controller.remove(query);
                }
//                uiModel.setSelectedQuery(null);
                controller.selectVisible(null);
                controller.filterVisible(null);
                ((FiltersExplorer) libraryTree).setup(manager, filterModel, uiModel);
            }
        });
        filterButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                //selectButton.setSelected(false);
                if (uiModel.getSelectedQuery() != null && filterButton.isSelected()) {
                    FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                    controller.filterVisible(uiModel.getSelectedRoot());
                } else {
                    FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                    controller.filterVisible(null);
                }
            }
        });
        selectButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                //filterButton.setSelected(false);
                if (uiModel.getSelectedQuery() != null && selectButton.isSelected()) {
                    FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                    controller.selectVisible(uiModel.getSelectedRoot());
                } else {
                    FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                    controller.selectVisible(null);
                }
            }
        });
        exportColumnButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (uiModel.getSelectedQuery() != null) {
                    FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                    NotifyDescriptor.InputLine question = new NotifyDescriptor.InputLine(
                            NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumn.input"),
                            NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumn.input.title"));
                    if (DialogDisplayer.getDefault().notify(question) == NotifyDescriptor.OK_OPTION) {
                        String input = question.getInputText();
                        if (input != null && !input.isEmpty()) {
                            controller.exportToColumn(input, uiModel.getSelectedRoot());
                        }
                    }
                }
            }
        });
        exportWorkspaceButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (uiModel.getSelectedQuery() != null) {
                    FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                    controller.exportToNewWorkspace(uiModel.getSelectedRoot());
                }
            }
        });
        exportLabelVisible.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (uiModel.getSelectedQuery() != null) {
                    FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                    controller.exportToLabelVisible(uiModel.getSelectedRoot());
                }
            }
        });
        /*autoRefreshButton.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
        if (filterModel.isAutoRefresh() != autoRefreshButton.isSelected()) {
        FilterController controller = Lookup.getDefault().lookup(FilterController.class);
        controller.setAutoRefresh(autoRefreshButton.isSelected());
        }
        }
        });*/
        updateEnabled(false);
    }

    public void refreshModel(FilterModel filterModel, FilterUIModel uiModel) {
        //System.out.println("refresh filter model thread=" + Thread.currentThread().getName());
        this.filterModel = filterModel;
        this.uiModel = uiModel;
        //Unsetup
        unsetup();
        filterPanelPanel.unsetup();
        queriesExplorer.unsetup();
        //Setup
        setup();
        ((FiltersExplorer) libraryTree).setup(manager, filterModel, uiModel);
        queriesExplorer.setup(queriesPanel.manager, filterModel, uiModel);
        filterPanelPanel.setup(uiModel);
        updateEnabled(filterModel != null);
        updateControls();
    }

    private class QueriesPanel extends JPanel implements ExplorerManager.Provider {

        private ExplorerManager manager = new ExplorerManager();

        public QueriesPanel() {
            super(new BorderLayout());
            queriesExplorer = new QueryExplorer();
            add(queriesExplorer, BorderLayout.CENTER);
        }

        public ExplorerManager getExplorerManager() {
            return manager;
        }
    }

    private void updateEnabled(final boolean enabled) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                resetButton.setEnabled(enabled);
                selectButton.setEnabled(enabled);
                filterButton.setEnabled(enabled);
                /*autoRefreshButton.setEnabled(enabled);*/
                exportColumnButton.setEnabled(enabled && uiModel.getSelectedQuery() != null && filterModel.getCurrentQuery() != null);
                exportWorkspaceButton.setEnabled(enabled && uiModel.getSelectedQuery() != null && filterModel.getCurrentQuery() != null);
                exportLabelVisible.setEnabled(enabled && uiModel.getSelectedQuery() != null && filterModel.getCurrentQuery() != null);
            }
        });
    }

    private void updateControls() {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                if (filterModel != null) {
                    filterButton.setSelected(filterModel.isFiltering());
                    selectButton.setSelected(filterModel.isSelecting());
                    /*autoRefreshButton.setSelected(filterModel.isAutoRefresh());*/
                } else {
                    filterButton.setSelected(false);
                    selectButton.setSelected(false);
                    /*autoRefreshButton.setSelected(false);*/
                }
            }
        });

    }

    public void stateChanged(ChangeEvent e) {
        if (e.getSource() instanceof FilterUIModel) {
            if (uiModel.getSelectedQuery() != null && filterButton.isSelected()) {
                FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                controller.filterVisible(uiModel.getSelectedRoot());
            } else if (uiModel.getSelectedQuery() != null && selectButton.isSelected()) {
                FilterController controller = Lookup.getDefault().lookup(FilterController.class);
                controller.selectVisible(uiModel.getSelectedRoot());
            }
        } else if (e.getSource() instanceof FilterModel) {
            if (uiModel.getSelectedQuery() != null && filterModel.getCurrentQuery() == null) {
                //Remove case
                if(!Arrays.asList(filterModel.getQueries()).contains(uiModel.getSelectedRoot())) {
                    System.out.println("Remove");
                    uiModel.setSelectedQuery(null);
                }
            } else if (filterModel.getCurrentQuery() != null
                    && filterModel.getCurrentQuery() != uiModel.getSelectedQuery()
                    && filterModel.getCurrentQuery() != uiModel.getSelectedRoot()) {
                System.out.println("Add select");
                uiModel.setSelectedQuery(filterModel.getCurrentQuery());
            }
        }
        updateControls();
        updateEnabled(true);
    }

    private void unsetup() {
        if (filterModel != null) {
            filterModel.removeChangeListener(this);
        }
        if (uiModel != null) {
            uiModel.removeChangeListener(this);
        }
    }

    private void setup() {
        if (filterModel != null) {
            filterModel.addChangeListener(this);
        }
        if (uiModel != null) {
            uiModel.addChangeListener(this);
        }
    }

    /** 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;

        toolbar = new javax.swing.JToolBar();
        resetButton = new javax.swing.JButton();
        separator = new javax.swing.JToolBar.Separator();
        exportColumnButton = new javax.swing.JButton();
        exportWorkspaceButton = new javax.swing.JButton();
        exportLabelVisible = new javax.swing.JButton();
        splitPane = new javax.swing.JSplitPane();
        libraryTree = new FiltersExplorer();
        southPanel = new javax.swing.JPanel();
        filtersUIPanel = new javax.swing.JPanel();
        southToolbar = new javax.swing.JToolBar();
        buttonsPanel = new javax.swing.JPanel();
        selectButton = new javax.swing.JToggleButton();
        filterButton = new javax.swing.JToggleButton();

        setLayout(new java.awt.GridBagLayout());

        toolbar.setFloatable(false);
        toolbar.setRollover(true);

        resetButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.resetButton.text")); // NOI18N
        resetButton.setFocusable(false);
        resetButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        resetButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        toolbar.add(resetButton);
        toolbar.add(separator);

        exportColumnButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/table_export.png"))); // NOI18N
        exportColumnButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumnButton.text")); // NOI18N
        exportColumnButton.setToolTipText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumnButton.toolTipText")); // NOI18N
        exportColumnButton.setFocusable(false);
        exportColumnButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        exportColumnButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        toolbar.add(exportColumnButton);

        exportWorkspaceButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/workspace_export.png"))); // NOI18N
        exportWorkspaceButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportWorkspaceButton.text")); // NOI18N
        exportWorkspaceButton.setToolTipText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportWorkspaceButton.toolTipText")); // NOI18N
        exportWorkspaceButton.setFocusable(false);
        exportWorkspaceButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        exportWorkspaceButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        toolbar.add(exportWorkspaceButton);

        exportLabelVisible.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/labelvisible_export.png"))); // NOI18N
        exportLabelVisible.setToolTipText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportLabelVisible.toolTipText")); // NOI18N
        exportLabelVisible.setFocusable(false);
        exportLabelVisible.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        exportLabelVisible.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        toolbar.add(exportLabelVisible);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
        gridBagConstraints.weightx = 1.0;
        add(toolbar, gridBagConstraints);

        splitPane.setBorder(null);
        splitPane.setDividerLocation(260);
        splitPane.setDividerSize(3);
        splitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);

        libraryTree.setBorder(null);
        splitPane.setLeftComponent(libraryTree);

        southPanel.setLayout(new java.awt.BorderLayout());
        splitPane.setRightComponent(southPanel);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        add(splitPane, gridBagConstraints);

        filtersUIPanel.setLayout(new java.awt.BorderLayout());
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.gridwidth = 3;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 1, 5);
        add(filtersUIPanel, gridBagConstraints);

        southToolbar.setFloatable(false);
        southToolbar.setRollover(true);
        southToolbar.setOpaque(false);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 4;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(4, 5, 0, 0);
        add(southToolbar, gridBagConstraints);

        buttonsPanel.setOpaque(false);
        buttonsPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 4, 4));

        selectButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/select.png"))); // NOI18N
        selectButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.selectButton.text")); // NOI18N
        selectButton.setMargin(new java.awt.Insets(2, 7, 2, 14));
        buttonsPanel.add(selectButton);

        filterButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/filter.png"))); // NOI18N
        filterButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.filterButton.text")); // NOI18N
        filterButton.setMargin(new java.awt.Insets(2, 7, 2, 14));
        buttonsPanel.add(filterButton);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 4;
        add(buttonsPanel, gridBagConstraints);
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel buttonsPanel;
    private javax.swing.JButton exportColumnButton;
    private javax.swing.JButton exportLabelVisible;
    private javax.swing.JButton exportWorkspaceButton;
    private javax.swing.JToggleButton filterButton;
    private javax.swing.JPanel filtersUIPanel;
    private javax.swing.JScrollPane libraryTree;
    private javax.swing.JButton resetButton;
    private javax.swing.JToggleButton selectButton;
    private javax.swing.JToolBar.Separator separator;
    private javax.swing.JPanel southPanel;
    private javax.swing.JToolBar southToolbar;
    private javax.swing.JSplitPane splitPane;
    private javax.swing.JToolBar toolbar;
    // End of variables declaration//GEN-END:variables

    public ExplorerManager getExplorerManager() {
        return manager;
    }
}
TOP

Related Classes of org.gephi.desktop.filters.FiltersPanel$QueriesPanel

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.