| /* |
| * 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. |
| */ |
| package org.netbeans.modules.jakarta.web.beans.navigation; |
| |
| import java.awt.Component; |
| import java.awt.Cursor; |
| import java.awt.event.FocusEvent; |
| import java.awt.event.FocusListener; |
| import java.awt.event.KeyEvent; |
| import java.awt.event.MouseEvent; |
| import java.util.List; |
| |
| import javax.lang.model.element.Element; |
| import javax.lang.model.element.ExecutableElement; |
| import javax.lang.model.element.TypeElement; |
| import javax.lang.model.element.VariableElement; |
| import javax.lang.model.type.DeclaredType; |
| import javax.swing.DefaultListCellRenderer; |
| import javax.swing.DefaultListModel; |
| import javax.swing.JList; |
| import javax.swing.JPanel; |
| import javax.swing.ListModel; |
| |
| import org.netbeans.api.java.source.CompilationController; |
| import org.netbeans.api.java.source.ElementHandle; |
| import org.netbeans.api.java.source.ui.ElementIcons; |
| import org.netbeans.api.java.source.ui.ElementOpen; |
| |
| /** |
| * @author ads |
| * |
| */ |
| public class InjectablesPopup extends JPanel implements FocusListener { |
| |
| private static final long serialVersionUID = -6156872540472708548L; |
| |
| /** Creates new form DeclarationPopup */ |
| public InjectablesPopup(String title, List<ElementHandle<? extends Element>> handles, |
| CompilationController controller ) |
| { |
| myTitle = title; |
| myHandles = handles; |
| myController = controller; |
| |
| initComponents(); |
| |
| jList1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
| |
| addFocusListener(this); |
| } |
| |
| /** 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() { |
| java.awt.GridBagConstraints gridBagConstraints; |
| |
| jLabel1 = new javax.swing.JLabel(); |
| jScrollPane1 = new javax.swing.JScrollPane(); |
| jList1 = new javax.swing.JList(); |
| |
| setFocusCycleRoot(true); |
| setLayout(new java.awt.GridBagLayout()); |
| |
| jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); |
| jLabel1.setText(myTitle |
| ); |
| jLabel1.setFocusable(false); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; |
| add(jLabel1, gridBagConstraints); |
| |
| jList1.setModel(createListModel()); |
| jList1.setCellRenderer(new RendererImpl( myController )); |
| jList1.setSelectedIndex(0); |
| jList1.setVisibleRowCount(myHandles.size() |
| ); |
| jList1.addKeyListener(new java.awt.event.KeyAdapter() { |
| public void keyPressed(java.awt.event.KeyEvent evt) { |
| jList1KeyPressed(evt); |
| } |
| }); |
| jList1.addMouseListener(new java.awt.event.MouseAdapter() { |
| public void mouseClicked(java.awt.event.MouseEvent evt) { |
| jList1MouseClicked(evt); |
| } |
| }); |
| jScrollPane1.setViewportView(jList1); |
| |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 0; |
| gridBagConstraints.gridy = 1; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
| gridBagConstraints.weightx = 1.0; |
| gridBagConstraints.weighty = 1.0; |
| add(jScrollPane1, gridBagConstraints); |
| }// </editor-fold>//GEN-END:initComponents |
| |
| private void jList1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jList1MouseClicked |
| if (evt.getButton() == MouseEvent.BUTTON1 && evt.getClickCount() == 1) { |
| openSelected(); |
| } |
| }//GEN-LAST:event_jList1MouseClicked |
| |
| private void jList1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jList1KeyPressed |
| if (evt.getKeyCode() == KeyEvent.VK_ENTER && evt.getModifiers() == 0) { |
| openSelected(); |
| } |
| }//GEN-LAST:event_jList1KeyPressed |
| |
| |
| // Variables declaration - do not modify//GEN-BEGIN:variables |
| private javax.swing.JLabel jLabel1; |
| private javax.swing.JList jList1; |
| private javax.swing.JScrollPane jScrollPane1; |
| // End of variables declaration//GEN-END:variables |
| |
| private void openSelected() { |
| ElementHandle<Element> handle = (ElementHandle<Element>) jList1.getSelectedValue(); |
| |
| ElementOpen.open(myController.getClasspathInfo(), handle); |
| |
| PopupUtil.hidePopup(); |
| } |
| |
| private ListModel createListModel() { |
| DefaultListModel<ElementHandle<? extends Element>> dlm = new DefaultListModel<>(); |
| |
| for (ElementHandle<? extends Element> el: myHandles) { |
| dlm.addElement(el); |
| } |
| |
| return dlm; |
| } |
| |
| private static class RendererImpl extends DefaultListCellRenderer { |
| |
| private static final long serialVersionUID = -15584610894401459L; |
| |
| RendererImpl(CompilationController controller){ |
| myController = controller; |
| } |
| |
| @Override |
| public Component getListCellRendererComponent( |
| JList list, |
| Object value, |
| int index, |
| boolean isSelected, |
| boolean cellHasFocus) { |
| Component c = super.getListCellRendererComponent(list, value, index, |
| isSelected, cellHasFocus); |
| |
| if (value instanceof ElementHandle<?>) { |
| ElementHandle<?> handle = (ElementHandle<?>)value; |
| Element resolve = handle.resolve( myController); |
| if ( resolve!= null) { |
| DeclaredType parent = null; |
| if ( resolve instanceof VariableElement || |
| resolve instanceof ExecutableElement ) |
| { |
| TypeElement enclosingTypeElement = |
| myController.getElementUtilities(). |
| enclosingTypeElement(resolve); |
| parent = (DeclaredType)enclosingTypeElement.asType(); |
| } |
| setIcon(ElementIcons.getElementIcon(resolve.getKind(), |
| resolve.getModifiers())); |
| setText(Utils.format(resolve, parent , myController)); |
| } |
| } |
| |
| return c; |
| } |
| |
| private CompilationController myController; |
| } |
| |
| @Override |
| public void focusGained(FocusEvent arg0) { |
| jList1.requestFocus(); |
| jList1.requestFocusInWindow(); |
| } |
| |
| @Override |
| public void focusLost(FocusEvent arg0) { |
| } |
| |
| private String myTitle; |
| private List<ElementHandle<? extends Element>> myHandles; |
| private CompilationController myController; |
| |
| } |