|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.project.ui.actions;
import java.awt.Dialog;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Arrays;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.netbeans.api.project.Project;
import org.netbeans.modules.project.ui.NoMainProjectWarning;
import org.netbeans.modules.project.ui.OpenProjectList;
import org.netbeans.spi.project.ActionProvider;
import org.netbeans.spi.project.ui.support.ProjectActionPerformer;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.awt.Actions;
import org.openide.awt.MouseUtils;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
/** Invokes command on the main project.
*
* @author Pet Hrebejk
*/
public class MainProjectAction extends BasicAction implements PropertyChangeListener {
private String command;
private ProjectActionPerformer performer;
private String name;
public MainProjectAction(ProjectActionPerformer performer, String name, Icon icon) {
this( null, performer, name, icon );
}
public MainProjectAction(String command, String name, Icon icon) {
this( command, null, name, icon );
}
public MainProjectAction(String command, ProjectActionPerformer performer, String name, Icon icon) {
this.command = command;
this.performer = performer;
this.name = name;
setDisplayName( name );
if ( icon != null ) {
setSmallIcon( icon );
}
refreshView();
// Start listening on open projects list to correctly enable the action
OpenProjectList.getDefault().addPropertyChangeListener( this );
// XXX #47160: listen to changes in supported commands on current project, when that becomes possible
}
public void actionPerformed( ActionEvent e ) {
Project p = OpenProjectList.getDefault().getMainProject();
// if no main project than show warning and allow choose a main project
if (p == null) {
// show warning, if cancel then return
if (showNoMainProjectWarning (OpenProjectList.getDefault().getOpenProjects (), name)) {
return ;
}
p = OpenProjectList.getDefault().getMainProject();
}
if ( command != null ) {
ActionProvider ap = (ActionProvider)p.getLookup().lookup( ActionProvider.class );
if (Arrays.asList(ap.getSupportedActions()).contains(command)) {
ap.invokeAction(command, Lookup.EMPTY);
} else {
// #47160: was a supported command (e.g. on a freeform project) but was then removed.
Toolkit.getDefaultToolkit().beep();
refreshView();
}
}
else {
performer.perform( p );
}
}
// Private methods ---------------------------------------------------------
// Implementation of PropertyChangeListener --------------------------------
public void propertyChange( PropertyChangeEvent evt ) {
if ( evt.getPropertyName() == OpenProjectList.PROPERTY_MAIN_PROJECT ) {
refreshView ();
}
}
private void refreshView() {
Project p = OpenProjectList.getDefault().getMainProject();
boolean noOpenProject = OpenProjectList.getDefault ().getOpenProjects ().length == 0;
if ( command == null ) {
setEnabled( performer.enable( p ) );
}
else {
if ( p == null ) {
setEnabled( !noOpenProject );
}
else if ( ActionsUtil.commandSupported ( p, command, Lookup.EMPTY ) ) {
setEnabled( !noOpenProject );
}
else {
setEnabled( false );
}
}
}
private boolean showNoMainProjectWarning (Project[] projects, String action) {
boolean canceled;
final JButton okButton = new JButton (NbBundle.getMessage (NoMainProjectWarning.class, "LBL_NoMainClassWarning_ChooseMainProject_OK")); // NOI18N
// no main project set => warning
final NoMainProjectWarning panel = new NoMainProjectWarning (projects);
Object[] options = new Object[] {
okButton,
DialogDescriptor.CANCEL_OPTION
};
panel.addChangeListener (new ChangeListener () {
public void stateChanged (ChangeEvent e) {
if (e.getSource () instanceof MouseEvent && MouseUtils.isDoubleClick (((MouseEvent)e.getSource ()))) {
// click button and the finish dialog with selected class
okButton.doClick ();
} else {
okButton.setEnabled (panel.getSelectedProject () != null);
}
}
});
okButton.setEnabled (false);
DialogDescriptor desc = new DialogDescriptor (panel,
action == null ?
NbBundle.getMessage(NoMainProjectWarning.class, "CTL_NoMainProjectWarning_Title") :
Actions.cutAmpersand(action),
true, options, options[0], DialogDescriptor.DEFAULT_ALIGN, null, null);
desc.setMessageType (DialogDescriptor.INFORMATION_MESSAGE);
Dialog dlg = DialogDisplayer.getDefault ().createDialog (desc);
dlg.setVisible (true);
if (desc.getValue() != options[0]) {
canceled = true;
} else {
Project mainProject = panel.getSelectedProject ();
OpenProjectList.getDefault ().setMainProject (mainProject);
canceled = false;
}
dlg.dispose();
return canceled;
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.