|
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 javax.swing.Icon; import javax.swing.ImageIcon; import org.netbeans.api.project.Project; import org.openide.loaders.DataObject; import org.openide.util.ContextAwareAction; import org.openide.util.Lookup; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; import org.openide.util.Utilities; import org.openide.util.WeakListeners; /** Action sensitive to current project * * @author Pet Hrebejk */ public abstract class LookupSensitiveAction extends BasicAction implements LookupListener { private Lookup lookup; private Class[] watch; private LookupListener[] resultListeners; private static boolean refreshing = false; /** Formats the name with following */ /* public LookupSensitiveAction(String iconResource, Lookup lookup) { this( iconResource == null ? null : new ImageIcon( Utilities.loadImage( iconResource ) ), lookup ); } */ /** * Constructor for global actions. E.g. actions in main menu which * listen to the global context. * */ public LookupSensitiveAction(Icon icon, Lookup lookup, Class[] watch ) { super( null, icon ); if (lookup == null) { lookup = Utilities.actionsGlobalContext(); } this.lookup = lookup; this.watch = watch; this.resultListeners = new LookupListener[watch.length]; // Needs to listen on changes in results for ( int i = 0; i < watch.length; i++ ) { Lookup.Result result = lookup.lookup( new Lookup.Template( watch[i] ) ); result.allItems(); resultListeners[i] = (LookupListener)WeakListeners.create( LookupListener.class, this, result ); result.addLookupListener( resultListeners[i] ); } } public final void actionPerformed( ActionEvent e ) { actionPerformed( lookup ); } protected final Lookup getLookup() { return lookup; } /** Called when the action is performed */ protected abstract void actionPerformed( Lookup context ); /** Place where to change properties (enablement/name) when * the set of current projects changes. */ protected abstract void refresh( Lookup context ); /** Needs to override isEnabled in order to force refresh */ public boolean isEnabled() { refresh( lookup ); return super.isEnabled(); } // Implementation of LookupListener ---------------------------------------- public void resultChanged( LookupEvent e ) { if ( getPropertyChangeListeners().length == 0 ) { return; } if (!refreshing) { refreshing = true; // long start = System.currentTimeMillis(); refresh( lookup ); // System.err.println("Calling refresh" + this + " - " + getValue( javax.swing.Action.NAME ) + " : " + ( System.currentTimeMillis() - start ) ); // System.err.println(" " + e.getSource() + " : " + e); // if ( this instanceof CloseProject ) { // Thread.dumpStack(); // } refreshing = false; } } } |
... 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.