mirror of
https://github.com/igniterealtime/Spark.git
synced 2025-12-01 12:27:58 +00:00
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:
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -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());
|
||||||
|
|||||||
Reference in New Issue
Block a user