/* Copyright 2008-2010 Gephi Authors : Martin Škurla 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.neo4j.ui; import java.awt.Color; import javax.swing.JColorChooser; import javax.swing.JOptionPane; import org.gephi.desktop.neo4j.Neo4jMenuAction; import org.gephi.neo4j.plugin.api.DebugTarget; import org.gephi.neo4j.plugin.api.MutableNeo4jDelegateNodeDebugger; import org.gephi.neo4j.plugin.api.Neo4jVisualDebugger; import org.gephi.neo4j.plugin.api.NoMoreElementsException; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * * @author Martin Škurla */ public class DebugPanel extends javax.swing.JPanel { private final MutableNeo4jDelegateNodeDebugger neo4jDebugger; private final Neo4jVisualDebugger neo4jVisualDebugger = Lookup.getDefault().lookup(Neo4jVisualDebugger.class); public DebugPanel(MutableNeo4jDelegateNodeDebugger neo4jDebugger) { this.neo4jDebugger = neo4jDebugger; neo4jVisualDebugger.initialize(); initComponents(); initComponentsByDebuggerInfo(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { targetButtonGroup = new javax.swing.ButtonGroup(); nextButton = new javax.swing.JButton(); targetPanel = new javax.swing.JPanel(); nodesRadioButton = new javax.swing.JRadioButton(); pathsRadioButton = new javax.swing.JRadioButton(); visualizationPanel = new javax.swing.JPanel(); showNodesCheckBox = new javax.swing.JCheckBox(); showRelationshipsCheckBox = new javax.swing.JCheckBox(); relationshipsColorButton = new javax.swing.JButton(); nodesColorButton = new javax.swing.JButton(); nextButton.setText(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.nextButton.text")); // NOI18N nextButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nextButtonActionPerformed(evt); } }); targetPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.targetPanel.border.title"))); // NOI18N targetButtonGroup.add(nodesRadioButton); nodesRadioButton.setText(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.nodesRadioButton.text")); // NOI18N nodesRadioButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nodesRadioButtonActionPerformed(evt); } }); targetButtonGroup.add(pathsRadioButton); pathsRadioButton.setText(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.pathsRadioButton.text")); // NOI18N pathsRadioButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { pathsRadioButtonActionPerformed(evt); } }); javax.swing.GroupLayout targetPanelLayout = new javax.swing.GroupLayout(targetPanel); targetPanel.setLayout(targetPanelLayout); targetPanelLayout.setHorizontalGroup( targetPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(targetPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(targetPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(nodesRadioButton) .addComponent(pathsRadioButton)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); targetPanelLayout.setVerticalGroup( targetPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(targetPanelLayout.createSequentialGroup() .addComponent(nodesRadioButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(pathsRadioButton) .addContainerGap(14, Short.MAX_VALUE)) ); visualizationPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.visualizationPanel.border.title"))); // NOI18N showNodesCheckBox.setText(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.showNodesCheckBox.text")); // NOI18N showNodesCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { showNodesCheckBoxActionPerformed(evt); } }); showRelationshipsCheckBox.setText(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.showRelationshipsCheckBox.text")); // NOI18N showRelationshipsCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { showRelationshipsCheckBoxActionPerformed(evt); } }); relationshipsColorButton.setText(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.relationshipsColorButton.text")); // NOI18N relationshipsColorButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { relationshipsColorButtonActionPerformed(evt); } }); nodesColorButton.setText(org.openide.util.NbBundle.getMessage(DebugPanel.class, "DebugPanel.nodesColorButton.text")); // NOI18N nodesColorButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nodesColorButtonActionPerformed(evt); } }); javax.swing.GroupLayout visualizationPanelLayout = new javax.swing.GroupLayout(visualizationPanel); visualizationPanel.setLayout(visualizationPanelLayout); visualizationPanelLayout.setHorizontalGroup( visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(visualizationPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(showRelationshipsCheckBox) .addComponent(showNodesCheckBox)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(nodesColorButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(relationshipsColorButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); visualizationPanelLayout.setVerticalGroup( visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(visualizationPanelLayout.createSequentialGroup() .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(showNodesCheckBox) .addComponent(nodesColorButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(showRelationshipsCheckBox) .addComponent(relationshipsColorButton)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(targetPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(visualizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(286, Short.MAX_VALUE) .addComponent(nextButton) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(targetPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(visualizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(nextButton) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents private void initComponentsByDebuggerInfo() { switch (neo4jDebugger.getDebugTarget()) { case NODES: nodesRadioButton.setSelected(true); break; case PATHS: pathsRadioButton.setSelected(true); break; } setNodesColor(neo4jDebugger.getNodesColor()); setRelationshipsColor(neo4jDebugger.getRelationshipsColor()); showNodesCheckBox.setSelected(neo4jDebugger.isShowNodes()); nodesColorButton.setEnabled(neo4jDebugger.isShowNodes()); showRelationshipsCheckBox.setSelected(neo4jDebugger.isShowRelationships()); relationshipsColorButton.setEnabled(neo4jDebugger.isShowRelationships()); } private void setNodesColor(Color nodesColor) { neo4jDebugger.setNodesColor(nodesColor); nodesColorButton.setBackground(nodesColor); } private void setRelationshipsColor(Color relationshipsColor) { neo4jDebugger.setRelationshipsColor(relationshipsColor); relationshipsColorButton.setBackground(relationshipsColor); } private void nodesColorButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nodesColorButtonActionPerformed String colorDialogTitle = NbBundle.getMessage(Neo4jMenuAction.class, "CTL_Neo4j_NodesColorChooserDialogTitle"); JColorChooser nodesColorChooser = new JColorChooser(neo4jDebugger.getNodesColor()); DialogDescriptor colorDialog = new DialogDescriptor(nodesColorChooser, colorDialogTitle); int dialogResult = (Integer) DialogDisplayer.getDefault().notify(colorDialog); if (dialogResult == JOptionPane.OK_OPTION) { setNodesColor(nodesColorChooser.getColor()); neo4jVisualDebugger.update(neo4jDebugger); } }//GEN-LAST:event_nodesColorButtonActionPerformed private void relationshipsColorButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_relationshipsColorButtonActionPerformed String colorDialogTitle = NbBundle.getMessage(Neo4jMenuAction.class, "CTL_Neo4j_RelationshipsColorChooserDialogTitle"); JColorChooser relationshipsColorChooser = new JColorChooser(neo4jDebugger.getRelationshipsColor()); DialogDescriptor colorDialog = new DialogDescriptor(relationshipsColorChooser, colorDialogTitle); int dialogResult = (Integer) DialogDisplayer.getDefault().notify(colorDialog); if (dialogResult == JOptionPane.OK_OPTION) { setRelationshipsColor(relationshipsColorChooser.getColor()); neo4jVisualDebugger.update(neo4jDebugger); } }//GEN-LAST:event_relationshipsColorButtonActionPerformed private void nextButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextButtonActionPerformed try { neo4jVisualDebugger.nextStep(neo4jDebugger); } catch (NoMoreElementsException nmee) { nextButton.setEnabled(false); } }//GEN-LAST:event_nextButtonActionPerformed private void showNodesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showNodesCheckBoxActionPerformed nodesColorButton.setEnabled(showNodesCheckBox.isSelected()); neo4jDebugger.setShowNodes(showNodesCheckBox.isSelected()); neo4jVisualDebugger.update(neo4jDebugger); }//GEN-LAST:event_showNodesCheckBoxActionPerformed private void showRelationshipsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showRelationshipsCheckBoxActionPerformed relationshipsColorButton.setEnabled(showRelationshipsCheckBox.isSelected()); neo4jDebugger.setShowRelationships(showRelationshipsCheckBox.isSelected()); neo4jVisualDebugger.update(neo4jDebugger); }//GEN-LAST:event_showRelationshipsCheckBoxActionPerformed private void nodesRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nodesRadioButtonActionPerformed showRelationshipsCheckBox.setEnabled(false); relationshipsColorButton.setEnabled(false); neo4jDebugger.setDebugTarget(DebugTarget.NODES); neo4jVisualDebugger.update(neo4jDebugger); }//GEN-LAST:event_nodesRadioButtonActionPerformed private void pathsRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pathsRadioButtonActionPerformed showRelationshipsCheckBox.setEnabled(true); if (showRelationshipsCheckBox.isSelected()) { relationshipsColorButton.setEnabled(true); } neo4jDebugger.setDebugTarget(DebugTarget.PATHS); neo4jVisualDebugger.update(neo4jDebugger); }//GEN-LAST:event_pathsRadioButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton nextButton; private javax.swing.JButton nodesColorButton; private javax.swing.JRadioButton nodesRadioButton; private javax.swing.JRadioButton pathsRadioButton; private javax.swing.JButton relationshipsColorButton; private javax.swing.JCheckBox showNodesCheckBox; private javax.swing.JCheckBox showRelationshipsCheckBox; private javax.swing.ButtonGroup targetButtonGroup; private javax.swing.JPanel targetPanel; private javax.swing.JPanel visualizationPanel; // End of variables declaration//GEN-END:variables }