/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.editor.ext; import org.netbeans.editor.LocaleSupport; import javax.swing.*; import java.awt.*; import java.util.Collections; import java.util.List; /** * Code completion view component interface. It best fits the <tt>JList</tt> * but some users may require something else e.g. JTable. * * @author Miloslav Metelka * @version 1.00 */ public class ListCompletionView extends JList implements CompletionView { public ListCompletionView() { this(null); } public ListCompletionView(ListCellRenderer renderer) { setSelectionMode( javax.swing.ListSelectionModel.SINGLE_SELECTION ); if (renderer != null) { setCellRenderer(renderer); } getAccessibleContext().setAccessibleName(LocaleSupport.getString("ACSN_CompletionView")); getAccessibleContext().setAccessibleDescription(LocaleSupport.getString("ACSD_CompletionView")); } /** Populate the view with the result from a query. */ public void setResult(CompletionQuery.Result result) { if (result != null) { setResult(result.getData()); } else { setResult(Collections.EMPTY_LIST); } } public void setResult(List data) { if (data != null) { setModel(new Model(data)); if (data.size() > 0) { setSelectedIndex(0); } } } /** Force the list to ignore the visible-row-count property */ public Dimension getPreferredScrollableViewportSize() { return getPreferredSize(); } public void up() { if (getModel().getSize() > 0) { setSelectedIndex(getSelectedIndex() - 1); ensureIndexIsVisible(getSelectedIndex()); } } public void down() { int lastInd = getModel().getSize() - 1; if (lastInd >= 0) { setSelectedIndex(Math.min(getSelectedIndex() + 1, lastInd)); ensureIndexIsVisible(getSelectedIndex()); } } public void pageUp() { if (getModel().getSize() > 0) { int pageSize = Math.max(getLastVisibleIndex() - getFirstVisibleIndex(), 0); int firstInd = Math.max(getFirstVisibleIndex() - pageSize, 0); int ind = Math.max(getSelectedIndex() - pageSize, firstInd); ensureIndexIsVisible(firstInd); setSelectedIndex(ind); ensureIndexIsVisible(ind); } } public void pageDown() { int lastInd = getModel().getSize() - 1; if (lastInd >= 0) { int pageSize = Math.max(getLastVisibleIndex() - getFirstVisibleIndex(), 0); lastInd = Math.max(Math.min(getLastVisibleIndex() + pageSize, lastInd), 0); int ind = Math.max(Math.min(getSelectedIndex() + pageSize, lastInd), 0); ensureIndexIsVisible(lastInd); setSelectedIndex(ind); ensureIndexIsVisible(ind); } } public void begin() { if (getModel().getSize() > 0) { setSelectedIndex(0); ensureIndexIsVisible(0); } } public void end() { int lastInd = getModel().getSize() - 1; if (lastInd >= 0) { setSelectedIndex(lastInd); ensureIndexIsVisible(lastInd); } } public void setVisible(boolean visible) { // ??? never called // System.err.println("ListCompletionView.setVisible(" + visible + ")"); super.setVisible(visible); } static class Model extends AbstractListModel { List data; static final long serialVersionUID = 3292276783870598274L; public Model(List data) { this.data = data; } public int getSize() { return data.size(); } public Object getElementAt(int index) { return (index >= 0 && index < data.size()) ? data.get(index) : null; } List getData() { return data; } } }