1 19 package org.netbeans.modules.xml.schema.refactoring.ui; 20 21 import java.awt.GridBagConstraints ; 22 import java.awt.GridBagLayout ; 23 import java.awt.Image ; 24 import java.awt.event.MouseEvent ; 25 import java.beans.PropertyChangeListener ; 26 import javax.swing.JLabel ; 27 import javax.swing.JPanel ; 28 import javax.swing.JPopupMenu ; 29 import org.openide.awt.MouseUtils; 30 import org.openide.util.HelpCtx; 31 import org.openide.util.Utilities; 32 import org.openide.windows.TopComponent; 33 import org.openide.windows.WindowManager; 34 import java.awt.Component ; 35 import java.awt.event.ActionEvent ; 36 import javax.swing.AbstractAction ; 37 import javax.swing.JTabbedPane ; 38 import org.openide.util.NbBundle; 40 42 47 public class QueryPanelContainer extends TopComponent 48 { 49 public static final long serialVersionUID = 1L; 50 51 private static QueryPanelContainer usages = null; 52 private static QueryPanelContainer refactorings = null; 53 private transient boolean isVisible = false; 54 private JPopupMenu pop; 55 56 private PopupListener listener; 57 private CloseListener closeL; 58 private boolean isRefactoring; 59 private static Image QUERY_BADGE = Utilities.loadImage( 60 "org/netbeans/modules/refactoring/resources/"+ 61 "findusages.png" ); private static final String XML_SCHEMA_QUERY = "xml-schema-query"; public static final String PROP_SCHEMA_COMPONENT_CHANGED = 67 "prop-schema-component-changed"; 68 public static final String PROP_REQUEST_HIGHLIGHT_IN_SCHEMA_VIEW = 69 "prop-request-highlight-in-schema-view"; 70 71 72 private QueryPanelContainer() { 73 this("", false); 74 } 75 78 private QueryPanelContainer(String name, boolean isRefactoring) { 79 setName(name); 80 setToolTipText(name); 81 setFocusable(true); 82 setLayout(new GridBagLayout ()); 83 getAccessibleContext().setAccessibleDescription( 84 NbBundle.getMessage(QueryPanelContainer.class, 85 "ACSD_usagesPanel") 86 ); 87 pop = new JPopupMenu (); 88 pop.add(new Close()); 89 pop.add(new CloseAll()); 90 pop.add(new CloseAllButCurrent()); 91 listener = new PopupListener(); 92 closeL = new CloseListener(); 93 this.isRefactoring = isRefactoring; 94 setFocusCycleRoot(true); 95 JLabel label = new JLabel (NbBundle.getMessage( 96 QueryPanelContainer.class, "LBL_NoUsages")); 97 label.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 98 GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints (); 99 gridBagConstraints.gridx = 0; 100 gridBagConstraints.gridy = 0; 101 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 102 gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER; 103 this.add(label, gridBagConstraints); 104 } 105 106 107 108 109 public void addPanel(JPanel panel) { 110 QueryPanel.checkEventThread(); 111 if (panel == null){ 112 return; 113 } 114 GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints (); 118 gridBagConstraints.gridx = 0; 119 gridBagConstraints.gridy = 0; 120 gridBagConstraints.weightx = 0.2; 121 gridBagConstraints.weighty = 0.2; 122 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 123 gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER; 124 if (getComponentCount() == 0) { 125 add(panel, gridBagConstraints); 126 } else { 127 Component comp = getComponent(0); 128 if (comp instanceof JTabbedPane ) { 129 ((JTabbedPane ) comp).addTab(panel.getName() + " ", 130 null, panel, panel.getToolTipText()); ((JTabbedPane ) comp).setSelectedComponent(panel); 132 comp.validate(); 133 } else if (comp instanceof JLabel ) { 134 remove(comp); 135 add(panel, gridBagConstraints); 136 } else { 137 remove(comp); 138 JTabbedPane pane = new CloseButtonTabbedPane(); 139 pane.addMouseListener(listener); 140 pane.addPropertyChangeListener(closeL); 141 add(pane, gridBagConstraints); 142 pane.addTab(comp.getName() + " ", null, comp, 143 ((JPanel ) comp).getToolTipText()); pane.addTab(panel.getName() + " ", null, panel, 145 panel.getToolTipText()); pane.setSelectedComponent(panel); 147 pane.validate(); 148 repaint(); 149 } 150 } 151 if (!isVisible) { 152 isVisible = true; 153 open(); 154 } 155 validate(); 156 requestActive(); 157 } 158 159 protected void componentActivated () { 160 super.componentActivated(); 161 JPanel panel = getCurrentPanel(); 162 if (panel!=null) 163 panel.requestFocus(); 164 } 165 166 void removePanel(JPanel panel) { 167 QueryPanel.checkEventThread(); 171 Component comp = getComponentCount() > 0 ? getComponent(0) : null; 172 if (comp instanceof JTabbedPane ) { 173 JTabbedPane tabs = (JTabbedPane ) comp; 174 if (panel == null) { 175 panel = (JPanel ) tabs.getSelectedComponent(); 176 } 177 tabs.remove(panel); 178 if (tabs.getComponentCount() == 1) { 179 Component c = tabs.getComponent(0); 180 tabs.removeMouseListener(listener); 181 tabs.removePropertyChangeListener(closeL); 182 remove(tabs); 183 GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints (); 184 gridBagConstraints.gridx = 0; 185 gridBagConstraints.gridy = 0; 186 gridBagConstraints.weightx = 0.2; 187 gridBagConstraints.weighty = 0.2; 188 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 189 gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER; 190 add(c, gridBagConstraints); 191 } 192 } else { 193 if (comp != null) 194 remove(comp); 195 isVisible = false; 196 close(); 197 } 198 validate(); 199 repaint(); 200 } 201 202 void closeAllButCurrent() { 203 Component comp = getComponent(0); 204 if (comp instanceof JTabbedPane ) { 205 JTabbedPane tabs = (JTabbedPane ) comp; 206 Component current = tabs.getSelectedComponent(); 207 Component[] c = tabs.getComponents(); 208 for (int i = 0; i< c.length; i++) { 209 if (c[i]!=current) { 210 ((QueryPanel) c[i]).close(); 211 } 212 } 213 } 214 } 215 216 public static synchronized QueryPanelContainer getUsagesComponent() { 217 if ( usages == null ) { 218 usages = 219 (QueryPanelContainer) 220 WindowManager.getDefault().findTopComponent( 221 XML_SCHEMA_QUERY ); 222 } 223 return usages; 224 } 225 226 public static synchronized QueryPanelContainer 227 createUsagesComponent() { 228 if (usages == null) 229 usages = new QueryPanelContainer( 230 NbBundle.getMessage(QueryPanelContainer.class, 231 "LBL_Usages"), false); 232 return usages; 233 } 234 235 protected void componentClosed() { 236 isVisible = false; 237 if (getComponentCount() == 0) { 238 return ; 239 } 240 Component comp = getComponent(0); 241 if (comp instanceof JTabbedPane ) { 242 JTabbedPane pane = (JTabbedPane ) comp; 243 Component[] c = pane.getComponents(); 244 for (int i = 0; i< c.length; i++) { 245 ((QueryPanel) c[i]).close(); 246 } 247 } else if (comp instanceof QueryPanel) { 248 ((QueryPanel) comp).close(); 249 } 250 } 251 252 protected String preferredID() { 253 return "QueryPanel"; } 255 256 public int getPersistenceType() { 257 return PERSISTENCE_ALWAYS; 258 } 259 260 267 private QueryPanel getCurrentPanel() { 268 if (getComponentCount() > 0) { 269 Component comp = getComponent(0); 270 if (comp instanceof JTabbedPane ) { 271 JTabbedPane tabs = (JTabbedPane ) comp; 272 return (QueryPanel) tabs.getSelectedComponent(); 273 } else { 274 if (comp instanceof QueryPanel) 275 return (QueryPanel) comp; 276 } 277 } 278 return null; 279 } 280 281 301 302 private class CloseListener implements PropertyChangeListener { 303 304 public void propertyChange(java.beans.PropertyChangeEvent evt) { 305 } 310 311 } 312 315 private class PopupListener extends MouseUtils.PopupMouseAdapter { 316 317 321 protected void showPopup (MouseEvent e) { 322 pop.show(QueryPanelContainer.this, e.getX(), e.getY()); 323 } 324 } 326 private class Close extends AbstractAction { 327 public static final long serialVersionUID = 1L; 328 329 public Close() { 330 super(NbBundle.getMessage(QueryPanelContainer.class, 331 "LBL_CloseWindow")); 332 } 333 334 public void actionPerformed(ActionEvent e) { 335 removePanel(null); 336 } 337 } 338 339 private final class CloseAll extends AbstractAction { 340 public static final long serialVersionUID = 1L; 341 342 public CloseAll() { 343 super(NbBundle.getMessage(QueryPanelContainer.class, 344 "LBL_CloseAll")); 345 } 346 347 public void actionPerformed(ActionEvent e) { 348 close(); 349 } 350 } 351 352 private class CloseAllButCurrent extends AbstractAction { 353 public static final long serialVersionUID = 1L; 354 355 public CloseAllButCurrent() { 356 super(NbBundle.getMessage(QueryPanelContainer.class, 357 "LBL_CloseAllButCurrent")); 358 } 359 360 public void actionPerformed(ActionEvent e) { 361 closeAllButCurrent(); 362 } 363 } 364 365 public HelpCtx getHelpCtx() { 366 return new HelpCtx(QueryPanelContainer.class.getName() 368 + (isRefactoring ? ".refactoring-preview" : ".find-usages") ); } 370 371 public java.awt.Image getIcon() { 372 return QUERY_BADGE; 373 } 374 375 376 377 381 398 399 400 } 401 | Popular Tags |