|
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.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Iterator; import java.util.List; import javax.swing.*; import javax.swing.event.PopupMenuListener; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectUtils; import org.netbeans.modules.project.ui.OpenProjectList; import org.netbeans.api.project.ProjectInformation; import org.netbeans.modules.project.ui.ProjectTab; import org.openide.nodes.Node; import org.openide.util.NbBundle; import org.openide.util.Utilities; import org.openide.util.actions.Presenter; import org.openide.filesystems.FileChangeAdapter; import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileObject; public class RecentProjects extends AbstractAction implements Presenter.Menu, PropertyChangeListener, PopupMenuListener { private static final String ICON = "org/netbeans/modules/project/ui/resources/empty.gif"; //NOI18N /** Key for remembering project in JMenuItem */ private static final String PROJECT_KEY = "org.netbeans.modules.project.ui.RecentProjectItem"; // NOI18N private final ProjectDirListener prjDirListener = new ProjectDirListener(); private JMenu subMenu; private boolean recreate; public RecentProjects() { super( NbBundle.getMessage(RecentProjects.class, "LBL_RecentProjectsAction_Name"), // NOI18N new ImageIcon(Utilities.loadImage(ICON))); OpenProjectList.getDefault().addPropertyChangeListener( this ); recreate = true; } public boolean isEnabled() { return !OpenProjectList.getDefault().isRecentProjectsEmpty(); } /** Perform the action. Tries the performer and then scans the ActionMap * of selected topcomponent. */ public void actionPerformed(java.awt.event.ActionEvent ev) { // no operation } public JMenuItem getMenuPresenter() { createSubMenu(); return subMenu; } private void createSubMenu() { if ( subMenu == null ) { subMenu = new JMenu(this); subMenu.setMnemonic (NbBundle.getMessage(RecentProjects.class, "MNE_RecentProjectsAction_Name").charAt (0)); // NOI18N subMenu.getPopupMenu().addPopupMenuListener( this ); } } private void fillSubMenu() { createSubMenu(); subMenu.removeAll(); List projects = OpenProjectList.getDefault().getRecentProjects(); if ( projects.isEmpty() ) { subMenu.setEnabled( false ); return; } subMenu.setEnabled( true ); ActionListener jmiActionListener = new MenuItemActionListener(); // Fill menu with items for ( Iterator it = projects.iterator(); it.hasNext(); ) { Project p = (Project)it.next(); FileObject prjDir = p.getProjectDirectory(); if (prjDir == null || !prjDir.isValid()) { continue; } prjDir.removeFileChangeListener(prjDirListener); prjDir.addFileChangeListener(prjDirListener); ProjectInformation pi = ProjectUtils.getInformation(p); JMenuItem jmi = new JMenuItem(pi.getDisplayName(), pi.getIcon()); subMenu.add( jmi ); jmi.putClientProperty( PROJECT_KEY, p ); jmi.addActionListener( jmiActionListener ); } recreate = false; } // Implementation of change listener --------------------------------------- public void propertyChange( PropertyChangeEvent e ) { if ( OpenProjectList.PROPERTY_RECENT_PROJECTS.equals( e.getPropertyName() ) ) { createSubMenu(); subMenu.setEnabled( !OpenProjectList.getDefault().isRecentProjectsEmpty() ); recreate = true; } } // Implementation of PopupMenuListener ------------------------------------- public void popupMenuWillBecomeVisible( javax.swing.event.PopupMenuEvent e ) { if ( recreate ) { fillSubMenu(); } } public void popupMenuWillBecomeInvisible( javax.swing.event.PopupMenuEvent e ) { } public void popupMenuCanceled( javax.swing.event.PopupMenuEvent e ) { } // Innerclasses ------------------------------------------------------------ private static class MenuItemActionListener implements ActionListener { public void actionPerformed( ActionEvent e ) { if ( e.getSource() instanceof JMenuItem ) { JMenuItem jmi = (JMenuItem)e.getSource(); Project project = (Project)jmi.getClientProperty( PROJECT_KEY ); if ( project != null ) { OpenProjectList.getDefault().open( project ); ProjectTab ptLogial = ProjectTab.findDefault (ProjectTab.ID_LOGICAL); Node root = ptLogial.getExplorerManager ().getRootContext (); Node projNode = root.getChildren ().findChild ( project.getProjectDirectory().getName ()); try { ptLogial.getExplorerManager ().setSelectedNodes (new Node[] {projNode}); ptLogial.open (); ptLogial.requestActive (); } catch (Exception ignore) { // may ignore it } } } } } private class ProjectDirListener extends FileChangeAdapter { public void fileDeleted(FileEvent fe) { recreate = 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.