1 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 ; 25 import java.beans.PropertyChangeListener ; 26 27 import javax.swing.BorderFactory ; 28 import javax.swing.JLabel ; 29 import javax.swing.UIManager ; 30 31 36 public class MiniStatusBar extends JLabel { 37 38 final static public String PROP_NODE_DESCRIPTION = "nodeDescription"; 40 41 private ExplorerManager explorerMgr; 42 private PropertyChangeListener selectedNodesListener; 43 private PropertyChangeListener 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")), BorderFactory.createCompoundBorder( 62 BorderFactory.createMatteBorder(0,0,1,1,UIManager.getDefaults().getColor("controlHighlight")), BorderFactory.createLineBorder(UIManager.getDefaults().getColor("controlDkShadow")) )) 65 ); 66 } 67 68 69 70 72 public void setExplorerManager (ExplorerManager mgr) { 73 if (explorerMgr !=null && explorerMgr.equals (mgr)) { 74 selectedNodesListener.propertyChange 76 (new PropertyChangeEvent (this, 77 ExplorerManager.PROP_SELECTED_NODES, null, mgr.getSelectedNodes ())); 78 79 return ; 81 } 82 if (explorerMgr!=null) { 84 explorerMgr.removePropertyChangeListener (selectedNodesListener); 85 } 86 if (mgr!=null) { 88 if (selectedNodesListener==null) { 89 selectedNodesListener = new SelectedNodesListener (); 90 } 91 selectedNodesListener.propertyChange 92 (new PropertyChangeEvent (this, 93 ExplorerManager.PROP_SELECTED_NODES, null, mgr.getSelectedNodes ())); 94 mgr.addPropertyChangeListener (selectedNodesListener); 95 } 96 explorerMgr = mgr; 97 } 98 99 100 class SelectedNodesListener implements PropertyChangeListener { 101 102 private Node[] describedNodes; 104 105 109 public void propertyChange(PropertyChangeEvent evt) { 110 if (ExplorerManager.PROP_SELECTED_NODES.equals (evt.getPropertyName ())) { 111 Object newVal = evt.getNewValue (); 112 if (describedNodes!=null && describedNodes.equals (newVal) && (evt.getOldValue ()!=null)) 113 return ; 115 if (newVal instanceof Node[]) { 116 describedNodes = (Node[])newVal; 117 String description = null; 118 for (int i=0; i<describedNodes.length; i++) { 119 String newDesc = getNodeDesc (describedNodes[i]); 120 if (description==null) { 121 description = newDesc; 122 } else if (!description.equals (newDesc)) { 123 description = null; 126 break; 127 } 128 } 129 setText (description); 131 } 132 } 133 } 134 135 136 private String getNodeDesc (Node n) { 137 String nodeDesc = (String )n.getValue (PROP_NODE_DESCRIPTION); 138 if (nodeDesc==null) { 139 nodeDesc = n.getShortDescription (); 141 if (nodeDesc != null && nodeDesc.equals (n.getDisplayName ())) { 143 nodeDesc = null; 145 } 146 } 147 return nodeDesc; 148 } 149 150 } 151 152 153 } 154 | Popular Tags |