Updating Contact List to search for users using ctrl - n

git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@5493 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Derek DeMoro
2006-09-25 05:02:33 +00:00
committed by derek
parent 58f28781be
commit 7aa19623b7
2 changed files with 74 additions and 19 deletions

View File

@ -8,9 +8,12 @@
package org.jivesoftware.spark.component;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.spark.ui.ContactItem;
import org.jivesoftware.spark.util.ModelUtil;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
@ -19,26 +22,28 @@ import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JWindow;
import javax.swing.ListCellRenderer;
/**
* Implementation of a popup field from a TextField.
*
* @author Derek DeMoro
*/
public class JPopupField extends JPanel {
public class JContactItemField extends JPanel {
private JTextField textField = new JTextField();
private DefaultListModel model = new DefaultListModel();
private JList list = new JList(model);
private JWindow popup;
private List<String> items;
private List<ContactItem> items;
public JPopupField(List items) {
public JContactItemField(List items) {
setLayout(new BorderLayout());
this.items = items;
@ -55,13 +60,16 @@ public class JPopupField extends JPanel {
if (ch == KeyEvent.VK_ENTER) {
int index = list.getSelectedIndex();
if (index >= 0) {
String selection = (String)list.getSelectedValue();
textField.setText(selection);
ContactItem selection = (ContactItem)list.getSelectedValue();
textField.setText(selection.getNickname());
popup.setVisible(false);
}
dispatchEvent(keyEvent);
}
if (ch == KeyEvent.VK_ESCAPE) {
popup.setVisible(false);
}
dispatchEvent(keyEvent);
}
public void keyPressed(KeyEvent e) {
@ -77,6 +85,8 @@ public class JPopupField extends JPanel {
popup.getContentPane().add(new JScrollPane(list));
list.setCellRenderer(new PopupRenderer());
}
public void setItems(List list) {
@ -88,17 +98,17 @@ public class JPopupField extends JPanel {
String typedItem = textField.getText();
final List<String> validItems = new ArrayList<String>();
for (String string : items) {
if (string.startsWith(typedItem)) {
validItems.add(string);
final List<ContactItem> validItems = new ArrayList<ContactItem>();
for (ContactItem contactItem : items) {
if (contactItem.getNickname().startsWith(typedItem)) {
validItems.add(contactItem);
}
}
if (validItems.size() > 0) {
for (final String str : validItems) {
model.addElement(str);
for (final ContactItem label : validItems) {
model.addElement(label);
}
}
@ -169,5 +179,46 @@ public class JPopupField extends JPanel {
textField.setText(text);
}
class PopupRenderer extends JLabel implements ListCellRenderer {
/**
* Construct Default JLabelIconRenderer.
*/
public PopupRenderer() {
setOpaque(true);
this.setHorizontalTextPosition(JLabel.RIGHT);
this.setHorizontalAlignment(JLabel.LEFT);
}
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
}
else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
ContactItem contactItem = (ContactItem)value;
setText(contactItem.getNickname());
if (contactItem.getIcon() == null) {
setIcon(SparkRes.getImageIcon(SparkRes.CLEAR_BALL_ICON));
}
else {
setIcon(contactItem.getIcon());
}
setFont(contactItem.getNicknameLabel().getFont());
setForeground(contactItem.getForeground());
return this;
}
}
}

View File

@ -37,7 +37,7 @@ import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.UserManager;
import org.jivesoftware.spark.Workspace;
import org.jivesoftware.spark.component.InputDialog;
import org.jivesoftware.spark.component.JPopupField;
import org.jivesoftware.spark.component.JContactItemField;
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.component.VerticalFlowLayout;
import org.jivesoftware.spark.component.WrappedLabel;
@ -103,6 +103,7 @@ import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.JFrame;
public final class ContactList extends JPanel implements ActionListener, ContactGroupListener, Plugin, RosterListener, ConnectionListener {
private JPanel mainPanel = new JPanel();
@ -1775,15 +1776,18 @@ public final class ContactList extends JPanel implements ActionListener, Contact
Iterator contactItems = group.getContactItems().iterator();
while (contactItems.hasNext()) {
ContactItem item = (ContactItem)contactItems.next();
contacts.add(item.getNickname());
contactMap.put(item.getNickname(), item);
if (contactMap.get(item.getNickname()) == null) {
contacts.add(item);
contactMap.put(item.getNickname(), item);
}
}
}
final JPopupField contactField = new JPopupField(new ArrayList(contacts));
final JDialog frame = new JDialog(SparkManager.getMainWindow(), Res.getString("title.find.contacts"), false);
final JContactItemField contactField = new JContactItemField(new ArrayList(contacts));
final JFrame frame = new JFrame();
frame.setUndecorated(true);
JPanel layoutPanel = new JPanel();
layoutPanel.setLayout(new GridBagLayout());
frame.getContentPane().setLayout(new BorderLayout());