Skip to content
This repository has been archived by the owner on Oct 15, 2021. It is now read-only.

Commit

Permalink
Fix PerspectiveMember open/close and better SPI
Browse files Browse the repository at this point in the history
  • Loading branch information
mbastian committed Oct 19, 2011
1 parent 3d1d17f commit 4fc58b8
Show file tree
Hide file tree
Showing 4 changed files with 163 additions and 84 deletions.
2 changes: 1 addition & 1 deletion DesktopPerspective/manifest.mf
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ OpenIDE-Module: org.gephi.desktop.perspective
OpenIDE-Module-Install: org/gephi/desktop/perspective/Installer.class
OpenIDE-Module-Layer: org/gephi/desktop/perspective/layer.xml
OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/perspective/Bundle.properties
OpenIDE-Module-Specification-Version: 0.8.0.2
OpenIDE-Module-Specification-Version: 0.8.1

Original file line number Diff line number Diff line change
Expand Up @@ -48,29 +48,24 @@ Development and Distribution License("CDDL") (collectively, the
import javax.swing.Icon;
import javax.swing.JToggleButton;
import org.gephi.desktop.perspective.spi.Perspective;
import org.gephi.desktop.perspective.spi.PerspectiveMember;
import org.gephi.ui.utils.UIUtils;
import org.openide.util.ImageUtilities;
import org.openide.util.Lookup;
import org.openide.util.NbPreferences;
import org.openide.windows.TopComponent;
import org.openide.windows.TopComponentGroup;
import org.openide.windows.WindowManager;

/**
*
* @author Mathieu Bastian
*/
public class BannerComponent extends javax.swing.JPanel {

private String selectedPerspective;
private static final String SELECTED_PERSPECTIVE_PREFERENCE = "BannerComponent_selectedPerspective";

private transient JToggleButton[] buttons;
private transient PerspectiveController perspectiveController;

public BannerComponent() {
initComponents();

selectedPerspective = NbPreferences.forModule(BannerComponent.class).get(SELECTED_PERSPECTIVE_PREFERENCE, null);
//Init perspective controller
perspectiveController = new PerspectiveController();

addGroupTabs();

Expand All @@ -97,63 +92,26 @@ public void actionPerformed(ActionEvent e) {
}

private void addGroupTabs() {
final Perspective[] perspectives = Lookup.getDefault().lookupAll(Perspective.class).toArray(new Perspective[0]);

buttons = new JPerspectiveButton[perspectives.length];
buttons = new JPerspectiveButton[perspectiveController.getPerspectives().length];
int i = 0;

//Add tabs
for (final Perspective perspective : perspectives) {
for (final Perspective perspective : perspectiveController.getPerspectives()) {
JPerspectiveButton toggleButton = new JPerspectiveButton(perspective.getDisplayName(), perspective.getIcon());
toggleButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
//Close other perspective
for (Perspective g : perspectives) {
if (g != perspective) {
TopComponentGroup tpg = WindowManager.getDefault().findTopComponentGroup(g.getName());
tpg.close();
}
}

//Open perspective
TopComponentGroup tpg = WindowManager.getDefault().findTopComponentGroup(perspective.getName());
tpg.open();

PerspectiveMember[] members = Lookup.getDefault().lookupAll(PerspectiveMember.class).toArray(new PerspectiveMember[0]);

//Close members
Perspective closingPerspective = getPerspective(selectedPerspective);
for (PerspectiveMember member : members) {
if (member.close(closingPerspective)) {
if (member instanceof TopComponent) {
boolean closed = ((TopComponent) member).close();
//System.out.println("Close "+member+" : "+closed);
}
}
}

//Open members
for (PerspectiveMember member : members) {
if (member.open(perspective)) {
if (member instanceof TopComponent && !((TopComponent) member).isOpened()) {
((TopComponent) member).open();
//System.out.println("Open "+member);
}
}
}

selectedPerspective = perspective.getName();
NbPreferences.forModule(BannerComponent.class).put(SELECTED_PERSPECTIVE_PREFERENCE, selectedPerspective);
perspectiveController.select(perspective);
}
});
perspectivesButtonGroup.add(toggleButton);
buttonsPanel.add(toggleButton);
buttons[i++] = toggleButton;
}

refreshSelectedPerspective();
//Set currently selected button
perspectivesButtonGroup.setSelected(buttons[perspectiveController.getSelectedPerspectiveIndex()].getModel(), true);
}

//Not working
Expand All @@ -168,29 +126,6 @@ public void actionPerformed(ActionEvent e) {
}
}
}*/
private void refreshSelectedPerspective() {
Perspective[] perspectives = Lookup.getDefault().lookupAll(Perspective.class).toArray(new Perspective[0]);
if (selectedPerspective == null) {
perspectivesButtonGroup.setSelected(buttons[0].getModel(), true);
selectedPerspective = perspectives[0].getName();
} else {
for (int j = 0; j < perspectives.length; j++) {
String groupName = perspectives[j].getName();
if (selectedPerspective.equals(groupName)) {
perspectivesButtonGroup.setSelected(buttons[j].getModel(), true);
}
}
}
}

private Perspective getPerspective(String name) {
for (Perspective p : Lookup.getDefault().lookupAll(Perspective.class)) {
if (p.getName().equals(name)) {
return p;
}
}
return null;
}

/** This method is called from within the constructor to
* initialize the form.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <[email protected]>
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.perspective;

import org.gephi.desktop.perspective.spi.Perspective;
import org.gephi.desktop.perspective.spi.PerspectiveMember;
import org.openide.util.Lookup;
import org.openide.util.NbPreferences;
import org.openide.windows.TopComponent;
import org.openide.windows.TopComponentGroup;
import org.openide.windows.WindowManager;

/**
*
* @author Mathieu Bastian
*/
public class PerspectiveController {

private static final String SELECTED_PERSPECTIVE_PREFERENCE = "BannerComponent_selectedPerspective";
//Data
private String selectedPerspective;
private final Perspective[] perspectives;
private final PerspectiveMember[] members;

public PerspectiveController() {
//Load perspectives
perspectives = Lookup.getDefault().lookupAll(Perspective.class).toArray(new Perspective[0]);
members = Lookup.getDefault().lookupAll(PerspectiveMember.class).toArray(new PerspectiveMember[0]);

//Set to previously selected perspective
selectedPerspective = NbPreferences.forModule(BannerComponent.class).get(SELECTED_PERSPECTIVE_PREFERENCE, perspectives[0].getName());
Perspective selectedPerspectiveInstance = getSelectedPerspective();

//Open members
for (PerspectiveMember perspectiveMember : members) {
if (perspectiveMember.isMemberOf(selectedPerspectiveInstance)) {
String pId = perspectiveMember.getTopComponentId();
TopComponent c = WindowManager.getDefault().findTopComponent(pId);
if (c != null && !c.isOpened()) {
c.open();
}
}
}
}

public Perspective[] getPerspectives() {
return perspectives;
}

public Perspective getSelectedPerspective() {
for (Perspective p : perspectives) {
if (p.getName().equals(selectedPerspective)) {
return p;
}
}
return null;
}

public int getSelectedPerspectiveIndex() {
int i = 0;
for (Perspective p : perspectives) {
if (p.getName().equals(selectedPerspective)) {
return i;
}
i++;
}
return -1;
}

public void select(Perspective perspective) {
if (perspective.getName().equals(selectedPerspective)) {
return;
}

//Close other perspective based on group name
for (Perspective g : perspectives) {
if (g != perspective) {
TopComponentGroup tpg = WindowManager.getDefault().findTopComponentGroup(g.getName());
tpg.close();
}
}

//Open perspective
TopComponentGroup tpg = WindowManager.getDefault().findTopComponentGroup(perspective.getName());
tpg.open();

//Close members
for (TopComponent c : WindowManager.getDefault().getRegistry().getOpened()) {
String pId = WindowManager.getDefault().findTopComponentID((TopComponent) c);
for (PerspectiveMember perspectiveMember : members) {
if (pId.equals(perspectiveMember.getTopComponentId()) && !perspectiveMember.isMemberOf(perspective)) {
boolean closed = c.close();
}
}
}


//Open members
for (PerspectiveMember perspectiveMember : members) {
if (perspectiveMember.isMemberOf(perspective)) {
String pId = perspectiveMember.getTopComponentId();
TopComponent c = WindowManager.getDefault().findTopComponent(pId);
if (c != null && !c.isOpened()) {
c.open();
}
}
}

selectedPerspective = perspective.getName();
NbPreferences.forModule(BannerComponent.class).put(SELECTED_PERSPECTIVE_PREFERENCE, selectedPerspective);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,7 @@ public interface PerspectiveMember {
* @return <code>true</code> if this component opens,
* <code>false</code> otherwise
*/
public boolean open(Perspective perspective);
public boolean isMemberOf(Perspective perspective);

/**
* Returns <code>true</code> if this component closes when
* <code>perspective</code> closes.
* @param perspective the perspective that is to be closed
* @return <code>true</code> if this component closes,
* <code>false</code> otherwise
*/
public boolean close(Perspective perspective);
public String getTopComponentId();
}

0 comments on commit 4fc58b8

Please sign in to comment.