1 19 20 package org.netbeans.modules.xml.wsdl.ui.view.treeeditor; 21 22 import java.awt.BorderLayout ; 23 import java.awt.EventQueue ; 24 import java.beans.PropertyChangeEvent ; 25 import java.beans.PropertyChangeListener ; 26 import java.beans.PropertyVetoException ; 27 import java.util.List ; 28 29 import javax.swing.ActionMap ; 30 import javax.swing.JPanel ; 31 import javax.swing.SwingUtilities ; 32 import javax.swing.text.DefaultEditorKit ; 33 34 import org.netbeans.modules.xml.schema.model.SchemaComponent; 35 import org.netbeans.modules.xml.wsdl.model.Definitions; 36 import org.netbeans.modules.xml.wsdl.model.WSDLComponent; 37 import org.netbeans.modules.xml.wsdl.model.WSDLModel; 38 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.UIUtilities; 39 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.Utility; 40 import org.openide.explorer.ExplorerManager; 41 import org.openide.explorer.ExplorerUtils; 42 import org.openide.explorer.view.BeanTreeView; 43 import org.openide.nodes.Node; 44 import org.openide.util.Lookup; 45 import org.openide.windows.TopComponent; 46 52 public class TreeEditorView extends JPanel  53 implements ExplorerManager.Provider, Lookup.Provider, 54 PropertyChangeListener { 55 56 59 private static final long serialVersionUID = -6844839168489591934L; 60 61 private BeanTreeView btv; 62 63 private ExplorerManager explorerManager; 64 private transient Lookup lookup; 65 66 public static final String PROP_VALID_NODE_SELECTED = "PROP_VALID_NODE_SELECTED"; 68 public static final String PROP_DUPLICATE_NODE_SELECTED = "PROP_DUPLICATE_NODE_SELECTED"; 70 private Node mRootNode; 71 72 private WSDLModel mModel; 73 74 public TreeEditorView(WSDLModel model) { 75 this.mModel = model; 76 initGUI(); 77 } 78 79 private void initGUI() { 80 setLayout(new BorderLayout ()); 81 btv = new BeanTreeView(); 83 btv.setRootVisible( true ); 84 btv.setSelectionMode( javax.swing.tree.TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION ); 85 btv.setPopupAllowed( true ); 86 add(btv, BorderLayout.CENTER); 87 88 explorerManager = new ExplorerManager(); 89 explorerManager.addPropertyChangeListener(this); 90 ActionMap map = getActionMap(); 91 map.put(DefaultEditorKit.copyAction, 92 ExplorerUtils.actionCopy(explorerManager)); 93 map.put(DefaultEditorKit.cutAction, 94 ExplorerUtils.actionCut(explorerManager)); 95 map.put(DefaultEditorKit.pasteAction, 96 ExplorerUtils.actionPaste(explorerManager)); 97 map.put("delete", ExplorerUtils.actionDelete(explorerManager, false)); 99 lookup = ExplorerUtils.createLookup(explorerManager, map); 100 101 EventQueue.invokeLater(new Runnable () { 103 public void run() { 104 populateRootNode(mModel.getDefinitions()); 106 btv.expandNode(mRootNode); 108 Utility.expandNodes(btv, 2, mRootNode); 109 try { 110 explorerManager.setSelectedNodes(new Node[] {mRootNode}); 111 } catch (PropertyVetoException pve) { 112 } 113 } 114 }); 115 } 116 117 public ExplorerManager getExplorerManager() { 118 return explorerManager; 119 } 120 121 public Lookup getLookup() { 122 return lookup; 123 } 124 125 private void populateRootNode(Definitions definitions) { 126 if (definitions != null) { 127 if (mRootNode == null) { 128 TopComponent tc = findParentTopComponent(); 129 DefinitionsNode dNode = new DefinitionsNode( 130 definitions, getExplorerManager(), tc); 131 mRootNode = dNode; 132 } 133 explorerManager.setRootContext( mRootNode ); 134 } 135 } 136 137 public void propertyChange(PropertyChangeEvent evt) { 138 if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) { 139 Node[] nodes = (Node[]) evt.getNewValue(); 140 if (nodes.length > 0) { 141 nodes[0].getChildren().getNodes(true); 142 TopComponent tc = findParentTopComponent(); 145 if (tc != null) { 147 tc.setActivatedNodes(nodes); 148 } 149 } 150 } 156 } 157 158 163 private TopComponent findParentTopComponent() { 164 return (TopComponent) SwingUtilities.getAncestorOfClass( 165 TopComponent.class, this); 166 } 167 168 public void showComponent(WSDLComponent sc) { 169 List <Node> path = UIUtilities.findPathFromRoot( 170 getExplorerManager().getRootContext(), sc); 171 if (path == null || path.isEmpty()) { 172 return; 173 } 174 Node node = path.get(path.size() - 1); 175 try { 176 getExplorerManager().setExploredContextAndSelection( 177 node, new Node[] { node }); 178 } catch (PropertyVetoException pve) { 179 } 180 } 181 182 public void showComponent(SchemaComponent sc) { 183 List <Node> path = UIUtilities.findPathFromRoot( 184 getExplorerManager().getRootContext(), sc, mModel); 185 if (path == null || path.isEmpty()) { 186 return; 187 } 188 Node node = path.get(path.size() - 1); 189 try { 190 getExplorerManager().setExploredContextAndSelection( 191 node, new Node[] { node }); 192 } catch (PropertyVetoException pve) { 193 } 194 } 195 196 210 @Override  211 public void requestFocus() { 212 super.requestFocus(); 213 btv.requestFocus(); 214 } 215 216 @Override  217 public boolean requestFocusInWindow() { 218 super.requestFocusInWindow(); 219 return btv.requestFocusInWindow(); 220 } 221 } 222 | Popular Tags |