package ctagsinterface.jedit; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Point; import java.awt.event.KeyEvent; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.gui.CompletionPopup; import ctagsinterface.jedit.TagCompletion.TagCandidates; import ctagsinterface.main.Tag; import ctagsinterface.options.GeneralOptionPane; @SuppressWarnings("serial") public class TagCompletionPopup extends CompletionPopup { private JTextArea desc; public TagCompletionPopup(View view, Point location) { super(view, location); if (! GeneralOptionPane.getCompleteDesc()) return; desc = new JTextArea(); desc.append("The description\nof this item"); desc.setBorder(BorderFactory.createEtchedBorder()); desc.setRows(8); Container c = getContentPane(); JPanel p = new JPanel(new BorderLayout()); p.add(c, BorderLayout.CENTER); p.add(new JScrollPane(desc), BorderLayout.SOUTH); setContentPane(p); } public void setSelectedTag(Tag tag) { if (! GeneralOptionPane.getCompleteDesc()) return; desc.setText(getDescription(tag)); } private String getDescription(Tag tag) { StringBuffer sb = new StringBuffer(); sb.append(tag.getFile() + ":" + tag.getLine() + "\n"); for (String ext: tag.getExtensions()) sb.append(ext + ": " + tag.getExtension(ext) + "\n"); return sb.toString(); } @Override protected void keyTyped(KeyEvent e) { char ch = e.getKeyChar(); int index = ((TagCandidates) getCandidates()).indexForKey(ch); if (index >= 0 && index < getCandidates().getSize()) { setSelectedIndex(index); if(doSelectedCompletion()) { e.consume(); dispose(); } return; } else ((TagCandidates) getCandidates()).narrow(ch); super.keyTyped(e); } }