/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>, Mathieu Jacomy, Julian Bilcke, Eduardo Ramos
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2011 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2011 Gephi Consortium.
*/
package org.gephi.desktop.datalab;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.TimeZone;
import org.gephi.graph.api.Column;
import org.gephi.graph.api.Configuration;
import org.gephi.graph.api.GraphModel;
import org.gephi.graph.api.TimeFormat;
import org.gephi.graph.api.TimeRepresentation;
import org.gephi.ui.utils.TimeFormatWrapper;
import org.gephi.ui.utils.TimeRepresentationWrapper;
import org.gephi.ui.utils.TimeZoneWrapper;
import org.joda.time.DateTimeZone;
import org.openide.util.NbBundle;
/**
* Configurations dialog for DataTableTopComponent
*
* @author Eduardo Ramos
*/
public class ConfigurationPanel extends javax.swing.JPanel {
private final DataTableTopComponent dataTableTopComponent;
private final GraphModel graphModel;
/**
* Creates new form ConfigurationPanel
*/
public ConfigurationPanel(final DataTableTopComponent dataTableTopComponent, final GraphModel graphModel) {
this.dataTableTopComponent = dataTableTopComponent;
this.graphModel = graphModel;
initComponents();
for (TimeFormat tf : TimeFormat.values()) {
timeFormatComboBox.addItem(new TimeFormatWrapper(tf));
}
timeFormatComboBox.setSelectedItem(new TimeFormatWrapper(graphModel.getTimeFormat()));
timeFormatComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
graphModel.setTimeFormat(((TimeFormatWrapper) timeFormatComboBox.getSelectedItem()).getTimeFormat());
dataTableTopComponent.refreshCurrentTable();
}
});
onlyVisibleCheckBox.setSelected(dataTableTopComponent.isShowOnlyVisible());
useSparklinesCheckBox.setSelected(dataTableTopComponent.isUseSparklines());
timeIntervalsGraphicsCheckBox.setSelected(dataTableTopComponent.isTimeIntervalGraphics());
showEdgesNodesLabelsCheckBox.setSelected(dataTableTopComponent.isShowEdgesNodesLabels());
//Timezone:
long currentTimestamp = System.currentTimeMillis();
DateTimeZone currentTimeZone = graphModel.getTimeZone();
buildTimeZoneList();
timeZoneComboBox.setSelectedItem(new TimeZoneWrapper(currentTimeZone.toTimeZone(), currentTimestamp));
timeZoneComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TimeZone selected = ((TimeZoneWrapper) timeZoneComboBox.getSelectedItem()).getTimeZone();
graphModel.setTimeZone(DateTimeZone.forTimeZone(selected));
dataTableTopComponent.refreshCurrentTable();
}
});
//Time representation:
for (TimeRepresentation tr : TimeRepresentation.values()) {
timeRepresentationComboBox.addItem(new TimeRepresentationWrapper(tr));
}
timeRepresentationComboBox.setSelectedItem(new TimeRepresentationWrapper(graphModel.getConfiguration().getTimeRepresentation()));
if (canChangeTimeRepresentation(graphModel)) {
timeRepresentationComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Configuration c = graphModel.getConfiguration();
c.setTimeRepresentation(((TimeRepresentationWrapper) timeRepresentationComboBox.getSelectedItem()).getTimeRepresentation());
graphModel.setConfiguration(c);
}
});
} else {
timeRepresentationComboBox.setEnabled(false);
timeRepresentationComboBox.setToolTipText(NbBundle.getMessage(ConfigurationPanel.class, "ConfigurationPanel.timeRepresentation.disabled.tooltip"));
}
}
private boolean canChangeTimeRepresentation(GraphModel graphModel) {
if (graphModel.getGraph().getNodeCount() > 0) {
return false;//Graph has to be empty
}
//Also there cannot be any column apart from the basic ones:
for (Column column : graphModel.getNodeTable()) {
String id = column.getId();
if (!id.equalsIgnoreCase("Id") && !id.equalsIgnoreCase("Label") && !id.equalsIgnoreCase("timeset")) {
return false;
}
}
for (Column column : graphModel.getEdgeTable()) {
String id = column.getId();
if (!id.equalsIgnoreCase("Id") && !id.equalsIgnoreCase("Label") && !id.equalsIgnoreCase("timeset") && !id.equalsIgnoreCase("Weight")) {
return false;
}
}
return true;
}
private void buildTimeZoneList() {
long currentTimestamp = System.currentTimeMillis();
for (String id : TimeZone.getAvailableIDs()) {
timeZoneComboBox.addItem(new TimeZoneWrapper(TimeZone.getTimeZone(id), currentTimestamp));
}
}
/**
* 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() {
onlyVisibleCheckBox = new javax.swing.JCheckBox();
useSparklinesCheckBox = new javax.swing.JCheckBox();
showEdgesNodesLabelsCheckBox = new javax.swing.JCheckBox();
timeIntervalsGraphicsCheckBox = new javax.swing.JCheckBox();
timeFormatComboBox = new javax.swing.JComboBox();
timeFormatLabel = new javax.swing.JLabel();
timeZoneLabel = new javax.swing.JLabel();
timeZoneComboBox = new javax.swing.JComboBox();
timeRepresentationLabel = new javax.swing.JLabel();
timeRepresentationComboBox = new javax.swing.JComboBox();
onlyVisibleCheckBox.setText(org.openide.util.NbBundle.getMessage(ConfigurationPanel.class, "ConfigurationPanel.onlyVisibleCheckBox.text")); // NOI18N
onlyVisibleCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
onlyVisibleCheckBoxActionPerformed(evt);
}
});
useSparklinesCheckBox.setText(org.openide.util.NbBundle.getMessage(ConfigurationPanel.class, "ConfigurationPanel.useSparklinesCheckBox.text")); // NOI18N
useSparklinesCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
useSparklinesCheckBoxActionPerformed(evt);
}
});
showEdgesNodesLabelsCheckBox.setText(org.openide.util.NbBundle.getMessage(ConfigurationPanel.class, "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text")); // NOI18N
showEdgesNodesLabelsCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
showEdgesNodesLabelsCheckBoxActionPerformed(evt);
}
});
timeIntervalsGraphicsCheckBox.setText(org.openide.util.NbBundle.getMessage(ConfigurationPanel.class, "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text")); // NOI18N
timeIntervalsGraphicsCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
timeIntervalsGraphicsCheckBoxActionPerformed(evt);
}
});
timeFormatLabel.setText(org.openide.util.NbBundle.getMessage(ConfigurationPanel.class, "ConfigurationPanel.timeFormatLabel.text")); // NOI18N
timeZoneLabel.setText(org.openide.util.NbBundle.getMessage(ConfigurationPanel.class, "ConfigurationPanel.timeZoneLabel.text")); // NOI18N
timeRepresentationLabel.setText(org.openide.util.NbBundle.getMessage(ConfigurationPanel.class, "ConfigurationPanel.timeRepresentationLabel.text")); // NOI18N
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(showEdgesNodesLabelsCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(timeIntervalsGraphicsCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(useSparklinesCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE)
.addComponent(onlyVisibleCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(timeFormatLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(timeZoneLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(timeRepresentationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(timeRepresentationComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(timeFormatComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(timeZoneComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(onlyVisibleCheckBox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(useSparklinesCheckBox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(timeIntervalsGraphicsCheckBox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(showEdgesNodesLabelsCheckBox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(timeFormatLabel)
.addComponent(timeFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(timeZoneLabel)
.addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(timeRepresentationLabel)
.addComponent(timeRepresentationComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void onlyVisibleCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onlyVisibleCheckBoxActionPerformed
dataTableTopComponent.setShowOnlyVisible(onlyVisibleCheckBox.isSelected());
}//GEN-LAST:event_onlyVisibleCheckBoxActionPerformed
private void useSparklinesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useSparklinesCheckBoxActionPerformed
dataTableTopComponent.setUseSparklines(useSparklinesCheckBox.isSelected());
}//GEN-LAST:event_useSparklinesCheckBoxActionPerformed
private void timeIntervalsGraphicsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_timeIntervalsGraphicsCheckBoxActionPerformed
dataTableTopComponent.setTimeIntervalGraphics(timeIntervalsGraphicsCheckBox.isSelected());
}//GEN-LAST:event_timeIntervalsGraphicsCheckBoxActionPerformed
private void showEdgesNodesLabelsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showEdgesNodesLabelsCheckBoxActionPerformed
dataTableTopComponent.setShowEdgesNodesLabels(showEdgesNodesLabelsCheckBox.isSelected());
}//GEN-LAST:event_showEdgesNodesLabelsCheckBoxActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox onlyVisibleCheckBox;
private javax.swing.JCheckBox showEdgesNodesLabelsCheckBox;
private javax.swing.JComboBox timeFormatComboBox;
private javax.swing.JLabel timeFormatLabel;
private javax.swing.JCheckBox timeIntervalsGraphicsCheckBox;
private javax.swing.JComboBox timeRepresentationComboBox;
private javax.swing.JLabel timeRepresentationLabel;
private javax.swing.JComboBox timeZoneComboBox;
private javax.swing.JLabel timeZoneLabel;
private javax.swing.JCheckBox useSparklinesCheckBox;
// End of variables declaration//GEN-END:variables
}