blob: c4f373b74fc8726cda6fad53f774f46b52c34c54 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* ClassMemberPanelUi.java
*
* Created on November 8, 2006, 4:03 PM
*/
package org.netbeans.modules.beans;
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.Rectangle;
import javax.swing.Action;
import javax.lang.model.element.Element;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import org.netbeans.api.java.source.ElementHandle;
import org.openide.nodes.Node;
import org.openide.util.NbBundle;
import org.openide.explorer.ExplorerManager;
import org.openide.explorer.view.BeanTreeView;
import org.openide.filesystems.FileObject;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
import org.openide.util.ImageUtilities;
import org.openide.util.Lookup;
/**
*
* @author phrebejk
*/
public class BeanPanelUI extends javax.swing.JPanel
implements ExplorerManager.Provider/* ,FiltersManager.FilterChangeListener */ {
private static WaitNode WAIT_NODE;
private ExplorerManager manager = new ExplorerManager();
private MyBeanTreeView elementView;
// private TapPanel filtersPanel;
private JLabel filtersLbl;
private Lookup lookup = null; // XXX may need better lookup
// private ClassMemberFilters filters;
private Action[] actions; // General actions for the panel
private static final Rectangle ZERO = new Rectangle(0,0,1,1);
/** Creates new form ClassMemberPanelUi */
public BeanPanelUI() {
initComponents();
// Tree view of the elements
elementView = createBeanTreeView();
add(elementView, BorderLayout.CENTER);
// filters
// filtersPanel = new TapPanel();
// filtersLbl = new JLabel(NbBundle.getMessage(ClassMemberPanelUI.class, "LBL_Filter")); //NOI18N
// filtersLbl.setBorder(new EmptyBorder(0, 5, 5, 0));
// filtersPanel.add(filtersLbl);
// filtersPanel.setOrientation(TapPanel.DOWN);
// // tooltip
// KeyStroke toggleKey = KeyStroke.getKeyStroke(KeyEvent.VK_T,
// Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
// String keyText = Utilities.keyToString(toggleKey);
// filtersPanel.setToolTipText(NbBundle.getMessage(ClassMemberPanelUI.class, "TIP_TapPanel", keyText));
//
// filters = new ClassMemberFilters( this );
// filters.getInstance().hookChangeListener(this);
// filtersPanel.add(filters.getComponent());
//
// actions = new Action[] {
// new SortByNameAction( filters ),
// new SortBySourceAction( filters ),
// null,
// new FilterSubmenuAction(filters.getInstance())
// };
//
// add(filtersPanel, BorderLayout.SOUTH);
//
manager.setRootContext(getWaitNode());
}
@Override
public boolean requestFocusInWindow() {
boolean result = super.requestFocusInWindow();
elementView.requestFocusInWindow();
return result;
}
public org.openide.util.Lookup getLookup() {
// XXX Check for chenge of FileObject
return lookup;
}
static synchronized Node getWaitNode() {
if ( WAIT_NODE == null ) {
WAIT_NODE = new WaitNode();
}
return WAIT_NODE;
}
public BeanScanningTask getTask() {
return new BeanScanningTask(this);
}
public void showWaitNode() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
elementView.setRootVisible(true);
manager.setRootContext(getWaitNode());
}
});
}
public void selectElementNode( ElementHandle<Element> eh ) {
// PatternNode root = getRootNode();
// if ( root == null ) {
// return;
// }
// PatternNode node = root.getNodeForElement(eh);
// try {
// manager.setSelectedNodes(new Node[]{ node == null ? getRootNode() : node });
// } catch (PropertyVetoException propertyVetoException) {
// Exceptions.printStackTrace(propertyVetoException);
// }
}
public void refresh( final ClassPattern pa ) {
final PatternNode rootNode = getRootNode();
if ( rootNode != null && rootNode.getPattern().getPatternAnalyser().getFileObject().equals( pa.getPatternAnalyser().getFileObject() ) ) {
// update
//System.out.println("UPDATE ======" + description.fileObject.getName() );
SwingUtilities.invokeLater(new Runnable() {
public void run() {
rootNode.updateRecursively( pa );
}
} );
}
else {
//System.out.println("REFRES =====" + description.fileObject.getName() );
// New fileobject => refresh completely
SwingUtilities.invokeLater(new Runnable() {
public void run() {
elementView.setRootVisible(false);
manager.setRootContext(new PatternNode( pa, true ) );
boolean scrollOnExpand = elementView.getScrollOnExpand();
elementView.setScrollOnExpand( false );
elementView.expandAll();
elementView.setScrollOnExpand( scrollOnExpand );
}
} );
}
}
public void sort() {
// getRootNode().refreshRecursively();
throw new UnsupportedOperationException();
}
// public ClassMemberFilters getFilters() {
// return filters;
// }
public void expandNode( Node n ) {
elementView.expandNode(n);
}
public Action[] getActions() {
return actions;
}
public FileObject getFileObject() {
return getRootNode().getPattern().getPatternAnalyser().getFileObject();
}
// FilterChangeListener ----------------------------------------------------
public void filterStateChanged(ChangeEvent e) {
// ElementNode root = getRootNode();
//
// if ( root != null ) {
// root.refreshRecursively();
// }
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
setLayout(new java.awt.BorderLayout());
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
// Private methods ---------------------------------------------------------
private PatternNode getRootNode() {
Node n = manager.getRootContext();
if ( n instanceof PatternNode ) {
return (PatternNode)n;
}
else {
return null;
}
}
private MyBeanTreeView createBeanTreeView() {
// ActionMap map = getActionMap();
// map.put(DefaultEditorKit.copyAction, ExplorerUtils.actionCopy(manager));
// map.put(DefaultEditorKit.cutAction, ExplorerUtils.actionCut(manager));
// map.put(DefaultEditorKit.pasteAction, ExplorerUtils.actionPaste(manager));
// map.put("delete", new DelegatingAction(ActionProvider.COMMAND_DELETE, ExplorerUtils.actionDelete(manager, true)));
//
MyBeanTreeView btv = new MyBeanTreeView(); // Add the BeanTreeView
// btv.setDragSource (true);
// btv.setRootVisible(false);
// associateLookup( ExplorerUtils.createLookup(manager, map) );
return btv;
}
// ExplorerManager.Provider imlementation ----------------------------------
public ExplorerManager getExplorerManager() {
return manager;
}
private static class MyBeanTreeView extends BeanTreeView {
public boolean getScrollOnExpand() {
return tree.getScrollsOnExpand();
}
public void setScrollOnExpand( boolean scroll ) {
this.tree.setScrollsOnExpand( scroll );
}
}
private static class WaitNode extends AbstractNode {
private Image waitIcon = ImageUtilities.loadImage("org/netbeans/modules/beans/resources/wait.gif"); // NOI18N
WaitNode( ) {
super( Children.LEAF );
}
@Override
public Image getIcon(int type) {
return waitIcon;
}
@Override
public Image getOpenedIcon(int type) {
return getIcon(type);
}
@java.lang.Override
public java.lang.String getDisplayName() {
return NbBundle.getMessage(BeanPanel.class, "LBL_WaitNode"); // NOI18N
}
}
}