|
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.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.BeanInfo; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; import java.text.MessageFormat; import java.util.Iterator; import java.util.List; import java.util.Set; import javax.swing.*; import javax.swing.JPopupMenu.Separator; import org.netbeans.api.project.Project; import org.netbeans.modules.project.ui.NewFileWizard; import org.netbeans.modules.project.ui.NoProjectNew; import org.netbeans.modules.project.ui.OpenProjectList; import org.netbeans.modules.project.ui.ProjectUtilities; import org.netbeans.spi.project.ui.templates.support.Templates; import org.openide.ErrorManager; import org.openide.filesystems.FileObject; import org.openide.loaders.DataFolder; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.nodes.Node; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.Utilities; import org.openide.util.actions.Presenter.Popup; /** Action for invoking the project sensitive NewFile Wizard */ public class NewFile extends ProjectAction implements PropertyChangeListener, Popup { private static final Icon ICON = new ImageIcon( Utilities.loadImage( "org/netbeans/modules/project/ui/resources/newFile.gif" ) ); //NOI18N private static final String NAME = NbBundle.getMessage( NewFile.class, "LBL_NewFileAction_Name" ); // NI18N private static final String POPUP_NAME = NbBundle.getMessage( NewFile.class, "LBL_NewFileAction_PopupName" ); // NOI18N private static final String FILE_POPUP_NAME = NbBundle.getMessage( NewFile.class, "LBL_NewFileAction_File_PopupName" ); // NOI18N private static final String TEMPLATE_NAME_FORMAT = NbBundle.getMessage( NewFile.class, "LBL_NewFileAction_Template_PopupName" ); // NOI18N public NewFile() { this( null ); } public NewFile( Lookup context ) { super( (String)null, NAME, ICON, context ); //NOI18N putValue("iconBase","org/netbeans/modules/project/ui/resources/newFile.gif"); //NOI18N OpenProjectList.getDefault().addPropertyChangeListener( this ); refresh( getLookup() ); } protected void refresh( Lookup context ) { setEnabled( OpenProjectList.getDefault().getOpenProjects().length > 0 ); setDisplayName( NAME ); } //private NewFileWizard wizardIterator; protected void actionPerformed( Lookup context ) { doPerform( context, null, true ); } private void doPerform( Lookup context, DataObject template, boolean inProject ) { if ( context == null ) { context = getLookup(); } if ( !inProject ) { // Context outside of projects NoProjectNew.showDialog( template, preselectedFolder( context ) ); return; } NewFileWizard wd = new NewFileWizard( preselectedProject( context ) /* , null */ ); DataFolder preselectedFolder = preselectedFolder( context ); if ( preselectedFolder != null ) { wd.setTargetFolder( preselectedFolder ); } try { Set resultSet = template == null ? wd.instantiate () : wd.instantiate( template ); if (resultSet == null) { // no new object, no work return ; } Iterator it = resultSet.iterator (); while (it.hasNext ()) { Object obj = it.next (); DataObject newDO = null; if (obj instanceof DataObject) { newDO = (DataObject) obj; } else if (obj instanceof FileObject) { try { newDO = DataObject.find ((FileObject) obj); } catch (DataObjectNotFoundException x) { // XXX assert false : obj; } } else { assert false : obj; } if (newDO != null) { ProjectUtilities.openAndSelectNewObject (newDO); } } } catch ( IOException e ) { ErrorManager.getDefault ().notify (ErrorManager.INFORMATIONAL, e); } // Update the Templates LRU for given project Project project = Templates.getProject( wd ); FileObject foTemplate = Templates.getTemplate( wd ); OpenProjectList.getDefault().updateTemplatesLRU( foTemplate ); } // Context Aware action implementation ------------------------------------- public Action createContextAwareInstance( Lookup actionContext ) { return new NewFile( actionContext ); } // Presenter.Popup implementation ------------------------------------------ public JMenuItem getPopupPresenter() { Project projects[] = ActionsUtil.getProjectsFromLookup( getLookup(), null ); if ( projects != null && projects.length > 0 ) { return createSubmenu( projects[0] ); } else { // When no project is seleceted only file and folder can be created return createNonProjectSubmenu(); } } // Private methods --------------------------------------------------------- private Project preselectedProject( Lookup context ) { Project preselectedProject = null; // if ( activatedNodes != null && activatedNodes.length != 0 ) { Project[] projects = ActionsUtil.getProjectsFromLookup( context, null ); if ( projects.length > 0 ) { preselectedProject = projects[0]; } if ( preselectedProject == null ) { // No project context => use main project preselectedProject = OpenProjectList.getDefault().getMainProject(); if ( preselectedProject == null ) { // No main project => use the first one preselectedProject = OpenProjectList.getDefault().getOpenProjects()[0]; } } if ( preselectedProject == null ) { assert false : "Action should be disabled"; // NOI18N } return preselectedProject; } private DataFolder preselectedFolder( Lookup context ) { DataFolder preselectedFolder = null; // Try to find selected folder preselectedFolder = (DataFolder)context.lookup( DataFolder.class ); if ( preselectedFolder == null ) { // No folder selectd try with DataObject DataObject dobj = (DataObject)context.lookup( DataObject.class ); if ( dobj != null) { // DataObject found => we'll use the parent folder preselectedFolder = dobj.getFolder(); } } return preselectedFolder; } public void propertyChange(PropertyChangeEvent evt) { refresh( Lookup.EMPTY ); } public static String TEMPLATE_PROPERTY = "org.netbeans.modules.project.ui.actions.NewFile.Template"; // NOI18N public static String IN_PROJECT_PROPERTY = "org.netbeans.modules.project.ui.actions.NewFile.InProject"; // NOI18N JMenuItem createSubmenu( Project project ) { JMenu menuItem = new JMenu( POPUP_NAME ); ActionListener menuListener = new PopupMenuListener(); JMenuItem fileItem = new JMenuItem( FILE_POPUP_NAME, (Icon)getValue( Action.SMALL_ICON ) ); fileItem.addActionListener( menuListener ); fileItem.putClientProperty( TEMPLATE_PROPERTY, null ); menuItem.add( fileItem ); List lruList = OpenProjectList.getDefault().getTemplatesLRU( project ); boolean first = true; for( Iterator it = lruList.iterator(); it.hasNext(); ) { DataObject template = (DataObject)it.next(); Node delegate = template.getNodeDelegate(); JMenuItem item = new JMenuItem( MessageFormat.format( TEMPLATE_NAME_FORMAT, new Object[] { delegate.getDisplayName() } ), new ImageIcon( delegate.getIcon( BeanInfo.ICON_COLOR_16x16 ) ) ); item.addActionListener( menuListener ); item.putClientProperty( TEMPLATE_PROPERTY, template ); if ( first ) { menuItem.add( new Separator() ); first = false; } menuItem.add( item ); } return menuItem; } JMenuItem createNonProjectSubmenu() { JMenu menuItem = new JMenu( POPUP_NAME ); ActionListener menuListener = new PopupMenuListener(); DataFolder preselectedFolder = preselectedFolder( getLookup() ); boolean canWrite; if ( preselectedFolder == null ) { canWrite = false; } else { FileObject pf = preselectedFolder.getPrimaryFile(); canWrite = pf != null && pf.canWrite(); } DataObject templates[] = NoProjectNew.getTemplates(); for( int i = 0; i < templates.length; i++ ) { Node n = templates[i].getNodeDelegate(); JMenuItem item = new JMenuItem( MessageFormat.format( TEMPLATE_NAME_FORMAT, new Object[] { n.getDisplayName() } ), new ImageIcon( n.getIcon( BeanInfo.ICON_COLOR_16x16 ) ) ); item.addActionListener( menuListener ); item.putClientProperty( TEMPLATE_PROPERTY, templates[i] ); item.putClientProperty( IN_PROJECT_PROPERTY, Boolean.FALSE ); item.setEnabled( canWrite ); menuItem.add( item ); } return menuItem; } private class PopupMenuListener implements ActionListener { public void actionPerformed( ActionEvent e ) { JMenuItem source = (JMenuItem)e.getSource(); Boolean inProject = (Boolean)source.getClientProperty( IN_PROJECT_PROPERTY ); DataObject template = (DataObject)source.getClientProperty( TEMPLATE_PROPERTY ); if ( inProject != null && inProject == Boolean.FALSE ) { doPerform( null, template, false ); } else { doPerform( null, template, true ); } } } } |
... 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.