KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mc4j > console > swing > MiniStatusBar


1 /*
2  * Copyright 2002-2004 Greg Hinkle
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.mc4j.console.swing;
18
19
20
21 import org.openide.explorer.ExplorerManager;
22 import org.openide.nodes.Node;
23
24 import java.beans.PropertyChangeEvent JavaDoc;
25 import java.beans.PropertyChangeListener JavaDoc;
26
27 import javax.swing.BorderFactory JavaDoc;
28 import javax.swing.JLabel JavaDoc;
29 import javax.swing.UIManager JavaDoc;
30
31 /**
32  *
33  * @author Greg Hinkle (ghinkle@users.sourceforge.net), September 2002
34  * @version $Revision: 480 $($Author: ghinkl $ / $Date: 2004-10-05 01:17:41 -0400 (Tue, 05 Oct 2004) $)
35  */

36 public class MiniStatusBar extends JLabel JavaDoc {
37
38     final static public String JavaDoc PROP_NODE_DESCRIPTION = "nodeDescription"; // NOI18N
39

40         
41     private ExplorerManager explorerMgr;
42     private PropertyChangeListener JavaDoc selectedNodesListener;
43     private PropertyChangeListener JavaDoc miniStatusBarStateListener;
44
45     
46     private MiniStatusBar () {
47         this (null);
48     }
49
50     public MiniStatusBar (ExplorerManager mgr) {
51         initialize ();
52         setExplorerManager (mgr);
53         setText("");
54     }
55
56     private void initialize () {
57         setOpaque (false);
58         setEnabled (true);
59         setBorder (BorderFactory.createCompoundBorder(
60             BorderFactory.createMatteBorder(1,0,0,0,UIManager.getDefaults().getColor("control")), // NOI18N
61
BorderFactory.createCompoundBorder(
62                 BorderFactory.createMatteBorder(0,0,1,1,UIManager.getDefaults().getColor("controlHighlight")), // NOI18N
63
BorderFactory.createLineBorder(UIManager.getDefaults().getColor("controlDkShadow")) // NOI18N
64
))
65         );
66     }
67     
68     
69     
70     /** Sets a explorer manager on which is listening for the PROP_SELECTED_NODES changes.
71      * @param mgr explorer manager whose nodes are described */

72     public void setExplorerManager (ExplorerManager mgr) {
73         if (explorerMgr !=null && explorerMgr.equals (mgr)) {
74             // notify the explorer tabs to show a description
75
selectedNodesListener.propertyChange
76                 (new PropertyChangeEvent JavaDoc (this,
77                     ExplorerManager.PROP_SELECTED_NODES, null, mgr.getSelectedNodes ()));
78
79             // no change
80
return ;
81         }
82         // first remove listeners for old manager
83
if (explorerMgr!=null) {
84             explorerMgr.removePropertyChangeListener (selectedNodesListener);
85         }
86         // add a listener for selected nodes
87
if (mgr!=null) {
88             if (selectedNodesListener==null) {
89                 selectedNodesListener = new SelectedNodesListener ();
90             }
91             selectedNodesListener.propertyChange
92                 (new PropertyChangeEvent JavaDoc (this,
93                     ExplorerManager.PROP_SELECTED_NODES, null, mgr.getSelectedNodes ()));
94             mgr.addPropertyChangeListener (selectedNodesListener);
95         }
96         explorerMgr = mgr;
97     }
98     
99     /** Listener for the PROP_SELECTED_NODES changes. */
100     class SelectedNodesListener implements PropertyChangeListener JavaDoc {
101         
102         // array of described nodes
103
private Node[] describedNodes;
104         
105         /** This method gets called when a PROP_SELECTED_NODES property is changed.
106          * @param evt A PropertyChangeEvent object describing the event source
107          * and the property that has changed.
108          */

109         public void propertyChange(PropertyChangeEvent JavaDoc evt) {
110             if (ExplorerManager.PROP_SELECTED_NODES.equals (evt.getPropertyName ())) {
111                 Object JavaDoc newVal = evt.getNewValue ();
112                 if (describedNodes!=null && describedNodes.equals (newVal) && (evt.getOldValue ()!=null))
113                     // no change
114
return ;
115                 if (newVal instanceof Node[]) {
116                     describedNodes = (Node[])newVal;
117                     String JavaDoc description = null;
118                     for (int i=0; i<describedNodes.length; i++) {
119                         String JavaDoc newDesc = getNodeDesc (describedNodes[i]);
120                         if (description==null) {
121                             description = newDesc;
122                         } else if (!description.equals (newDesc)) {
123                             // if the types are mixed then no description
124
//description = NbBundle.getMessage(MiniStatusBar.class, "CTL_MixedValues");
125
description = null;
126                             break;
127                         }
128                     }
129                     // set node description to status bar
130
setText (description);
131                 }
132             }
133         }
134         
135
136         private String JavaDoc getNodeDesc (Node n) {
137             String JavaDoc nodeDesc = (String JavaDoc)n.getValue (PROP_NODE_DESCRIPTION);
138             if (nodeDesc==null) {
139                 // if PROP_NODE_DESCRIPTION is null, try Node.PROP_SHORT_DESCRIPTION
140
nodeDesc = n.getShortDescription ();
141                 // change: status bar should be visible always
142
if (nodeDesc != null && nodeDesc.equals (n.getDisplayName ())) {
143                     // Tool tip == display name by default; no special information.
144
nodeDesc = null;
145                 }
146             }
147             return nodeDesc;
148         }
149        
150     }
151     
152     
153 }
154
Popular Tags