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; package org.jivesoftware.spark.component;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.spark.ui.ContactItem;
import org.jivesoftware.spark.util.ModelUtil; import org.jivesoftware.spark.util.ModelUtil;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Point; import java.awt.Point;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
@ -19,26 +22,28 @@ import java.util.List;
import javax.swing.DefaultListModel; import javax.swing.DefaultListModel;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList; import javax.swing.JList;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.JWindow; import javax.swing.JWindow;
import javax.swing.ListCellRenderer;
/** /**
* Implementation of a popup field from a TextField. * Implementation of a popup field from a TextField.
* *
* @author Derek DeMoro * @author Derek DeMoro
*/ */
public class JPopupField extends JPanel { public class JContactItemField extends JPanel {
private JTextField textField = new JTextField(); private JTextField textField = new JTextField();
private DefaultListModel model = new DefaultListModel(); private DefaultListModel model = new DefaultListModel();
private JList list = new JList(model); private JList list = new JList(model);
private JWindow popup; private JWindow popup;
private List<String> items; private List<ContactItem> items;
public JPopupField(List items) { public JContactItemField(List items) {
setLayout(new BorderLayout()); setLayout(new BorderLayout());
this.items = items; this.items = items;
@ -55,13 +60,16 @@ public class JPopupField extends JPanel {
if (ch == KeyEvent.VK_ENTER) { if (ch == KeyEvent.VK_ENTER) {
int index = list.getSelectedIndex(); int index = list.getSelectedIndex();
if (index >= 0) { if (index >= 0) {
String selection = (String)list.getSelectedValue(); ContactItem selection = (ContactItem)list.getSelectedValue();
textField.setText(selection); textField.setText(selection.getNickname());
popup.setVisible(false); popup.setVisible(false);
} }
dispatchEvent(keyEvent);
} }
if (ch == KeyEvent.VK_ESCAPE) {
popup.setVisible(false);
}
dispatchEvent(keyEvent);
} }
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
@ -77,6 +85,8 @@ public class JPopupField extends JPanel {
popup.getContentPane().add(new JScrollPane(list)); popup.getContentPane().add(new JScrollPane(list));
list.setCellRenderer(new PopupRenderer());
} }
public void setItems(List list) { public void setItems(List list) {
@ -88,17 +98,17 @@ public class JPopupField extends JPanel {
String typedItem = textField.getText(); String typedItem = textField.getText();
final List<String> validItems = new ArrayList<String>(); final List<ContactItem> validItems = new ArrayList<ContactItem>();
for (String string : items) { for (ContactItem contactItem : items) {
if (string.startsWith(typedItem)) { if (contactItem.getNickname().startsWith(typedItem)) {
validItems.add(string); validItems.add(contactItem);
} }
} }
if (validItems.size() > 0) { if (validItems.size() > 0) {
for (final String str : validItems) { for (final ContactItem label : validItems) {
model.addElement(str); model.addElement(label);
} }
} }
@ -169,5 +179,46 @@ public class JPopupField extends JPanel {
textField.setText(text); 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.UserManager;
import org.jivesoftware.spark.Workspace; import org.jivesoftware.spark.Workspace;
import org.jivesoftware.spark.component.InputDialog; 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.RolloverButton;
import org.jivesoftware.spark.component.VerticalFlowLayout; import org.jivesoftware.spark.component.VerticalFlowLayout;
import org.jivesoftware.spark.component.WrappedLabel; import org.jivesoftware.spark.component.WrappedLabel;
@ -103,6 +103,7 @@ import javax.swing.JToolBar;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.UIManager; import javax.swing.UIManager;
import javax.swing.JFrame;
public final class ContactList extends JPanel implements ActionListener, ContactGroupListener, Plugin, RosterListener, ConnectionListener { public final class ContactList extends JPanel implements ActionListener, ContactGroupListener, Plugin, RosterListener, ConnectionListener {
private JPanel mainPanel = new JPanel(); private JPanel mainPanel = new JPanel();
@ -1775,15 +1776,18 @@ public final class ContactList extends JPanel implements ActionListener, Contact
Iterator contactItems = group.getContactItems().iterator(); Iterator contactItems = group.getContactItems().iterator();
while (contactItems.hasNext()) { while (contactItems.hasNext()) {
ContactItem item = (ContactItem)contactItems.next(); ContactItem item = (ContactItem)contactItems.next();
contacts.add(item.getNickname()); if (contactMap.get(item.getNickname()) == null) {
contactMap.put(item.getNickname(), item); contacts.add(item);
contactMap.put(item.getNickname(), item);
}
} }
} }
final JPopupField contactField = new JPopupField(new ArrayList(contacts)); final JContactItemField contactField = new JContactItemField(new ArrayList(contacts));
final JDialog frame = new JDialog(SparkManager.getMainWindow(), Res.getString("title.find.contacts"), false);
final JFrame frame = new JFrame();
frame.setUndecorated(true);
JPanel layoutPanel = new JPanel(); JPanel layoutPanel = new JPanel();
layoutPanel.setLayout(new GridBagLayout()); layoutPanel.setLayout(new GridBagLayout());
frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().setLayout(new BorderLayout());