All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.netbeans.modules.javadoc.search.ReferencesPanel Maven / Gradle / Ivy

There is a newer version: RELEASE240
Show newest version
/*
 * 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.javadoc.search;

import java.awt.Dialog;
import java.awt.EventQueue;
import java.net.URL;
import java.util.List;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.ListModel;
import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.awt.Mnemonics;
import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;

/**
 * UI to display javadoc references in details.
 * 

Usage: {@code ReferencesPanel.showInWindow()} * * @see IndexBuilder * @see org.netbeans.modules.javadoc.search.IndexOverviewAction * * @author Jan Pokorsky */ public class ReferencesPanel extends javax.swing.JPanel implements Runnable, ListSelectionListener { private static final String PLEASE_WAIT = NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.wait.text"); private static final Object LOCK = new Object(); private static final String EMPTY_LOCATION = ""; // NOI18N private static final RequestProcessor RP = new RequestProcessor(ReferencesPanel.class.getName(), 1, false, false); private int state = 0; private ListModel model; /** Descriptions of indices that should be accessed under {@link #LOCK lock}. */ private ItemDesc[] items; private final AbstractButton openBtn; /** Creates new form ReferencesPanel */ public ReferencesPanel(AbstractButton openBtn) { initComponents(); Mnemonics.setLocalizedText(listLabel, NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.listLabel.text")); Mnemonics.setLocalizedText(locationLabel, NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.locationLabel.text")); this.openBtn = openBtn; } public static URL showInWindow() { JButton openBtn = new JButton(); Mnemonics.setLocalizedText(openBtn, NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.ok.text")); openBtn.getAccessibleContext().setAccessibleDescription(openBtn.getText()); openBtn.setEnabled(false); final Object[] buttons = new Object[] { openBtn, DialogDescriptor.CANCEL_OPTION }; ReferencesPanel panel = new ReferencesPanel(openBtn); DialogDescriptor desc = new DialogDescriptor( panel, NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.title"), true, buttons, openBtn, DialogDescriptor.DEFAULT_ALIGN, HelpCtx.DEFAULT_HELP, null); desc.setClosingOptions(buttons); Dialog dialog = DialogDisplayer.getDefault().createDialog(desc); dialog.getAccessibleContext().setAccessibleName(NbBundle.getMessage(ReferencesPanel.class, "AN_ReferencesDialog")); dialog.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(ReferencesPanel.class, "AD_ReferencesDialog")); // schedule computing indices RP.post(panel); dialog.setVisible(true); dialog.dispose(); return desc.getValue() == openBtn ? panel.getSelectedItem() : null; } public @Override void run() { switch (state) { case 0: runGetIndiciesTask(); break; case 1: runListUpdateTask(); break; } } private void runGetIndiciesTask() { final List data = IndexBuilder.getDefault().getIndices(true); synchronized (LOCK) { ItemDesc[] modelItems; if (data == null || data.isEmpty()) { modelItems = new ItemDesc[] { ItemDesc.noItem() }; } else { modelItems = new ItemDesc[data.size()]; this.items = modelItems; int i = 0; for (IndexBuilder.Index index : data) { modelItems[i] = new ItemDesc(index.display, index.fo); i++; } } model = new FixListModel(modelItems); } state = 1; EventQueue.invokeLater(this); } private void runListUpdateTask() { refList.setModel(model); refList.addListSelectionListener(this); refList.setSelectedIndex(0); } public @Override void valueChanged(ListSelectionEvent e) { URL item = getSelectedItem(); String s = item == null ? EMPTY_LOCATION : URLUtils.getDisplayName(item); locationField.setText(s); openBtn.setEnabled(item != null); } URL getSelectedItem() { int index = refList.getSelectedIndex(); synchronized (LOCK) { return index < 0 || items == null || items.length == 0 ? null : items[index].location; } } /** 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. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { listLabel = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); refList = new javax.swing.JList(new String[] {PLEASE_WAIT}); locationField = new javax.swing.JTextField(); locationLabel = new javax.swing.JLabel(); listLabel.setLabelFor(refList); listLabel.setText(org.openide.util.NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.listLabel.text")); // NOI18N refList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(refList); refList.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.refList.AccessibleContext.accessibleName")); // NOI18N refList.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.refList.AccessibleContext.accessibleDescription")); // NOI18N locationField.setEditable(false); locationLabel.setLabelFor(locationField); locationLabel.setText(org.openide.util.NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.locationLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE) .addComponent(listLabel, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(locationField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE) .addComponent(locationLabel, javax.swing.GroupLayout.Alignment.LEADING)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(listLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(locationLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(locationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); listLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.listLabel.AccessibleContext.accessibleName")); // NOI18N listLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.listLabel.AccessibleContext.accessibleDescription")); // NOI18N locationLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.locationLabel.AccessibleContext.accessibleName")); // NOI18N locationLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.locationLabel.AccessibleContext.accessibleDescription")); // NOI18N }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane jScrollPane1; private javax.swing.JLabel listLabel; private javax.swing.JTextField locationField; private javax.swing.JLabel locationLabel; private javax.swing.JList refList; // End of variables declaration//GEN-END:variables private static final class ItemDesc { private static ItemDesc NO_ITEM; String name; String locationName; URL location; public ItemDesc(String name, URL location) { this.name = name; this.location = location; } String getLocationName() { if (locationName == null) { locationName = URLUtils.getDisplayName(location); } return locationName; } static ItemDesc noItem() { if (NO_ITEM == null) { NO_ITEM = new ItemDesc(NbBundle.getMessage(ReferencesPanel.class, "ReferencesPanel.noJavadoc"), null); } return NO_ITEM; } } private static final class FixListModel implements ListModel { private ItemDesc[] items; public FixListModel(ItemDesc[] items) { this.items = items; } public @Override int getSize() { return items.length; } public @Override Object getElementAt(int index) { return items[index].name; } public @Override void addListDataListener(ListDataListener l) { // no op } public @Override void removeListDataListener(ListDataListener l) { // no op } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy