Open the element on popup click/select.
authorJan Lahoda <jlahoda@netbeans.org>
Fri, 10 Aug 2012 15:45:13 +0200
changeset 1785783fc895456d9
parent 17856 d816f0dd8f7b
child 17858 82ced9993fc9
Open the element on popup click/select.
java.breadcrumbs/nbproject/project.xml
java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbComponent.java
java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/NodeImpl.java
     1.1 --- a/java.breadcrumbs/nbproject/project.xml	Fri Aug 10 15:16:28 2012 +0200
     1.2 +++ b/java.breadcrumbs/nbproject/project.xml	Fri Aug 10 15:45:13 2012 +0200
     1.3 @@ -83,6 +83,14 @@
     1.4                      </run-dependency>
     1.5                  </dependency>
     1.6                  <dependency>
     1.7 +                    <code-name-base>org.openide.actions</code-name-base>
     1.8 +                    <build-prerequisite/>
     1.9 +                    <compile-dependency/>
    1.10 +                    <run-dependency>
    1.11 +                        <specification-version>6.27</specification-version>
    1.12 +                    </run-dependency>
    1.13 +                </dependency>
    1.14 +                <dependency>
    1.15                      <code-name-base>org.openide.awt</code-name-base>
    1.16                      <build-prerequisite/>
    1.17                      <compile-dependency/>
     2.1 --- a/java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbComponent.java	Fri Aug 10 15:16:28 2012 +0200
     2.2 +++ b/java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbComponent.java	Fri Aug 10 15:45:13 2012 +0200
     2.3 @@ -53,6 +53,7 @@
     2.4  import java.awt.RenderingHints;
     2.5  import java.awt.Toolkit;
     2.6  import java.awt.event.AWTEventListener;
     2.7 +import java.awt.event.ActionEvent;
     2.8  import java.awt.event.MouseAdapter;
     2.9  import java.awt.event.MouseEvent;
    2.10  import java.beans.PropertyChangeEvent;
    2.11 @@ -60,6 +61,7 @@
    2.12  import java.util.ArrayList;
    2.13  import java.util.Collections;
    2.14  import java.util.List;
    2.15 +import javax.swing.Action;
    2.16  import javax.swing.JComponent;
    2.17  import javax.swing.JList;
    2.18  import javax.swing.JPanel;
    2.19 @@ -340,6 +342,23 @@
    2.20              }
    2.21          }, AWTEvent.MOUSE_EVENT_MASK);
    2.22          
    2.23 +        expandManager.addPropertyChangeListener(new PropertyChangeListener() {
    2.24 +            @Override public void propertyChange(PropertyChangeEvent evt) {
    2.25 +                if (ExplorerManager.PROP_SELECTED_NODES.equals(evt.getPropertyName())) {
    2.26 +                    Node[] selected = expandManager.getSelectedNodes();
    2.27 +                    if (selected.length == 1) {
    2.28 +                        Action action = selected[0].getPreferredAction();
    2.29 +                        
    2.30 +                        if (action != null) {
    2.31 +                            action.actionPerformed(new ActionEvent(selected[0], 0, ""));
    2.32 +                        }
    2.33 +                        
    2.34 +                        popup.hide();
    2.35 +                    }
    2.36 +                }
    2.37 +            }
    2.38 +        });
    2.39 +        
    2.40          popup.show();
    2.41      }
    2.42  }
     3.1 --- a/java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/NodeImpl.java	Fri Aug 10 15:16:28 2012 +0200
     3.2 +++ b/java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/NodeImpl.java	Fri Aug 10 15:45:13 2012 +0200
     3.3 @@ -67,13 +67,17 @@
     3.4  import javax.lang.model.element.Element;
     3.5  import javax.swing.Action;
     3.6  import javax.swing.Icon;
     3.7 +import org.netbeans.api.actions.Openable;
     3.8  import org.netbeans.api.java.source.CompilationController;
     3.9  import org.netbeans.api.java.source.CompilationInfo;
    3.10  import org.netbeans.api.java.source.JavaSource;
    3.11  import org.netbeans.api.java.source.JavaSource.Phase;
    3.12  import org.netbeans.api.java.source.Task;
    3.13  import org.netbeans.api.java.source.TreePathHandle;
    3.14 +import org.netbeans.api.java.source.UiUtils;
    3.15  import org.netbeans.api.java.source.ui.ElementIcons;
    3.16 +import org.openide.actions.OpenAction;
    3.17 +import org.openide.cookies.OpenCookie;
    3.18  import org.openide.filesystems.FileObject;
    3.19  import org.openide.filesystems.FileUtil;
    3.20  import org.openide.nodes.AbstractNode;
    3.21 @@ -98,7 +102,7 @@
    3.22  //    private OpenAction openAction;
    3.23  
    3.24      public NodeImpl(TreePathHandle tph, Image icon, String htmlDisplayName, FileObject fileObject, int pos) {
    3.25 -        super(Children.create(new ChildrenFactoryImpl(tph), false), Lookups.fixed(tph, Integer.valueOf(pos)));
    3.26 +        super(Children.create(new ChildrenFactoryImpl(tph), false), Lookups.fixed(tph, Integer.valueOf(pos), new OpenableImpl(fileObject, pos)));
    3.27          this.icon = icon;
    3.28          this.htmlDisplayName = htmlDisplayName;
    3.29  //        this.openAction = new OpenAction(fileObject, pos);
    3.30 @@ -111,7 +115,7 @@
    3.31  
    3.32      @Override
    3.33      public Action getPreferredAction() {
    3.34 -        return null;//openAction;
    3.35 +        return OpenAction.get(OpenAction.class);
    3.36      }
    3.37  
    3.38      @Override
    3.39 @@ -338,4 +342,21 @@
    3.40          }
    3.41          
    3.42      }
    3.43 +    
    3.44 +    private static final class OpenableImpl implements Openable, OpenCookie {
    3.45 +
    3.46 +        private final FileObject file;
    3.47 +        private final int pos;
    3.48 +
    3.49 +        public OpenableImpl(FileObject file, int pos) {
    3.50 +            this.file = file;
    3.51 +            this.pos = pos;
    3.52 +        }
    3.53 +        
    3.54 +        @Override
    3.55 +        public void open() {
    3.56 +            UiUtils.open(file, pos);
    3.57 +        }
    3.58 +        
    3.59 +    }
    3.60  }