2
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4
* Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
6
* The contents of this file are subject to the terms of either the GNU
7
* General Public License Version 2 only ("GPL") or the Common
8
* Development and Distribution License("CDDL") (collectively, the
9
* "License"). You may not use this file except in compliance with the
10
* License. You can obtain a copy of the License at
11
* http://www.netbeans.org/cddl-gplv2.html
12
* or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13
* specific language governing permissions and limitations under the
14
* License. When distributing the software, include this License Header
15
* Notice in each file and include the License file at
16
* nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
17
* particular file as subject to the "Classpath" exception as provided
18
* by Sun in the GPL Version 2 section of the License file that
19
* accompanied this code. If applicable, add the following below the
20
* License Header, with the fields enclosed by brackets [] replaced by
21
* your own identifying information:
22
* "Portions Copyrighted [year] [name of copyright owner]"
26
* The Original Software is NetBeans. The Initial Developer of the Original
27
* Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
28
* Microsystems, Inc. All Rights Reserved.
30
* If you wish your version of this file to be governed by only the CDDL
31
* or only the GPL Version 2, indicate your decision by adding
32
* "[Contributor] elects to include this software in this distribution
33
* under the [CDDL or GPL Version 2] license." If you do not indicate a
34
* single choice of license, a recipient has the option to distribute
35
* your version of this file under either the CDDL, the GPL Version 2 or
36
* to extend the choice of license to its licensees as provided above.
37
* However, if you add GPL Version 2 code and therefore, elected the GPL
38
* Version 2 license, then the option applies only if the new code is
39
* made subject to such option by the copyright holder.
42
package org.netbeans.modules.openide.windows;
44
import org.openide.util.Lookup;
45
import org.openide.util.ContextGlobalProvider;
46
import org.openide.util.lookup.Lookups;
47
import org.openide.util.lookup.ProxyLookup;
48
import org.openide.windows.TopComponent;
50
/** An interface that can be registered in a lookup by subsystems
51
* wish to provide a global context actions should react to.
53
* @author Jaroslav Tulach
55
public final class GlobalActionContextImpl extends Object
56
implements ContextGlobalProvider, Lookup.Provider, java.beans.PropertyChangeListener {
57
/** registry to work with */
58
private TopComponent.Registry registry;
60
public GlobalActionContextImpl () {
61
this (TopComponent.getRegistry());
64
public GlobalActionContextImpl (TopComponent.Registry r) {
68
/** the lookup to temporarily use */
69
private static volatile Lookup temporary;
70
/** Temporarily provides different action map in the lookup.
72
public static void blickActionMap (javax.swing.ActionMap map) {
73
Object obj = Lookup.getDefault ().lookup (ContextGlobalProvider.class);
74
if (obj instanceof GlobalActionContextImpl) {
75
GlobalActionContextImpl g = (GlobalActionContextImpl)obj;
78
Lookups.singleton (map),
79
Lookups.exclude (g.getLookup (), new Class[] { javax.swing.ActionMap.class }),
82
Lookup prev = temporary;
84
temporary = new ProxyLookup (arr);
85
Object q = org.openide.util.Utilities.actionsGlobalContext ().lookup (javax.swing.ActionMap.class);
86
assert q == map : "We really get map from the lookup. Map: " + map + " returned: " + q; // NOI18N
89
// fire the changes about return of the values back
90
org.openide.util.Utilities.actionsGlobalContext ().lookup (javax.swing.ActionMap.class);
95
/** Let's create the proxy listener that delegates to currently
96
* selected top component.
98
public Lookup createGlobalContext() {
99
registry.addPropertyChangeListener(this);
100
return org.openide.util.lookup.Lookups.proxy(this);
103
/** The current component lookup */
104
public Lookup getLookup() {
105
Lookup l = temporary;
110
TopComponent tc = registry.getActivated();
111
return tc == null ? Lookup.EMPTY : tc.getLookup();
114
/** Requests refresh of our lookup everytime component is chagned.
116
public void propertyChange(java.beans.PropertyChangeEvent evt) {
117
if (TopComponent.Registry.PROP_ACTIVATED.equals (evt.getPropertyName())) {
118
org.openide.util.Utilities.actionsGlobalContext ().lookup (javax.swing.ActionMap.class);