/*
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.ui.workspace;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.project.api.ProjectController;
import org.gephi.project.api.WorkspaceProvider;
import org.gephi.ui.components.JPopupPane;
import org.gephi.project.api.Workspace;
import org.gephi.project.api.WorkspaceInformation;
import org.openide.util.Lookup;
/**
*
* @author Mathieu Bastian
*/
public class WorkspaceUISelectorPanel extends javax.swing.JPanel implements ChangeListener {
private JPopupPane pane;
private Workspace workspace;
/** Creates new form WorkspaceUISelectorPanel */
public WorkspaceUISelectorPanel() {
initComponents();
workspaceLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
workspaceLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
WorkspaceUISelectorPopupContent content = new WorkspaceUISelectorPopupContent();
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
if (pc.getCurrentProject() == null) {
return;
}
for (Workspace w : pc.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces()) {
content.addListComponent(new WorkspacePanePanel(w));
}
pane = new JPopupPane(WorkspaceUISelectorPanel.this, content);
pane.showPopupPane();
}
});
leftArrowButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Workspace sel = getPrecedentWorkspace(workspace);
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
if (pc.getCurrentWorkspace() != sel) {
pc.openWorkspace(sel);
}
}
});
rightArrowButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Workspace sel = getNextWorkspace(workspace);
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
if (pc.getCurrentWorkspace() != sel) {
pc.openWorkspace(sel);
}
}
});
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
if (pc.getCurrentWorkspace() != null) {
setSelectedWorkspace(pc.getCurrentWorkspace());
} else {
noSelectedWorkspace();
}
}
public void setSelectedWorkspace(Workspace workspace) {
if (this.workspace != null) {
this.workspace.getLookup().lookup(WorkspaceInformation.class).removeChangeListener(this);
}
workspaceLabel.setFont(new java.awt.Font("Tahoma", 0, 11));
workspaceLabel.setText(workspace.getLookup().lookup(WorkspaceInformation.class).getName());
workspaceLabel.setEnabled(true);
leftArrowButton.setEnabled(getPrecedentWorkspace(workspace) != null);
rightArrowButton.setEnabled(getNextWorkspace(workspace) != null);
if (pane != null && pane.isPopupShown()) {
pane.hidePopup();
}
this.workspace = workspace;
this.workspace.getLookup().lookup(WorkspaceInformation.class).addChangeListener(this);
}
public void noSelectedWorkspace() {
workspaceLabel.setFont(new java.awt.Font("Tahoma", 2, 11)); // NOI18N
workspaceLabel.setText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.workspaceLabel.text")); // NOI18N
workspaceLabel.setEnabled(false);
leftArrowButton.setEnabled(false);
rightArrowButton.setEnabled(false);
if (workspace != null) {
workspace.getLookup().lookup(WorkspaceInformation.class).removeChangeListener(this);
}
workspace = null;
}
public void refreshList() {
if (workspace != null) {
leftArrowButton.setEnabled(getPrecedentWorkspace(workspace) != null);
rightArrowButton.setEnabled(getNextWorkspace(workspace) != null);
}
}
public void stateChanged(ChangeEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
workspaceLabel.setText(workspace.getLookup().lookup(WorkspaceInformation.class).getName());
}
});
}
private Workspace getPrecedentWorkspace(Workspace workspace) {
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
Workspace prec = null;
Workspace[] workspaces = pc.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces();
for (Workspace w : workspaces) {
if (w == workspace) {
break;
}
prec = w;
}
return prec;
}
private Workspace getNextWorkspace(Workspace workspace) {
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
Workspace next = null;
Workspace[] workspaces = pc.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces();
for (Workspace w : workspaces) {
if (next == workspace) {
return w;
}
next = w;
}
return null;
}
/** 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() {
jToolBar1 = new javax.swing.JToolBar();
jSeparator1 = new javax.swing.JToolBar.Separator();
workspaceLabel = new javax.swing.JLabel();
leftArrowButton = new javax.swing.JButton();
rightArrowButton = new javax.swing.JButton();
jSeparator2 = new javax.swing.JToolBar.Separator();
setLayout(new java.awt.GridBagLayout());
jToolBar1.setFloatable(false);
jToolBar1.setRollover(true);
jToolBar1.add(jSeparator1);
workspaceLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/workspace/resources/workspace.png"))); // NOI18N
workspaceLabel.setText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.workspaceLabel.text")); // NOI18N
workspaceLabel.setIconTextGap(7);
workspaceLabel.setMaximumSize(new java.awt.Dimension(120, 16));
workspaceLabel.setPreferredSize(new java.awt.Dimension(100, 16));
jToolBar1.add(workspaceLabel);
leftArrowButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/workspace/resources/leftArrow.png"))); // NOI18N
leftArrowButton.setText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.leftArrowButton.text")); // NOI18N
leftArrowButton.setToolTipText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.leftArrowButton.toolTipText")); // NOI18N
leftArrowButton.setEnabled(false);
leftArrowButton.setFocusable(false);
leftArrowButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
leftArrowButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jToolBar1.add(leftArrowButton);
rightArrowButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/workspace/resources/rightArrow.png"))); // NOI18N
rightArrowButton.setText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.rightArrowButton.text")); // NOI18N
rightArrowButton.setToolTipText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.rightArrowButton.toolTipText")); // NOI18N
rightArrowButton.setEnabled(false);
rightArrowButton.setFocusable(false);
rightArrowButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
rightArrowButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jToolBar1.add(rightArrowButton);
jToolBar1.add(jSeparator2);
add(jToolBar1, new java.awt.GridBagConstraints());
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JToolBar.Separator jSeparator1;
private javax.swing.JToolBar.Separator jSeparator2;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JButton leftArrowButton;
private javax.swing.JButton rightArrowButton;
private javax.swing.JLabel workspaceLabel;
// End of variables declaration//GEN-END:variables
}