📄 bsbuddyfinderwindow.java
字号:
package edu.ou.kmi.buddyspace.plugins.buddyfinder.gui;
/*
* BSBuddyFinderWindow.java
*
* Project: BuddySpace
* (C) Copyright Knowledge Media Institute 2005
*
*/
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.net.*;
import org.jabber.jabberbeans.*;
import org.jabber.jabberbeans.Extension.*;
import org.jabber.jabberbeans.util.*;
import edu.ou.kmi.buddyspace.core.*;
import edu.ou.kmi.buddyspace.gui.*;
import edu.ou.kmi.buddyspace.utils.*;
import edu.ou.kmi.buddyspace.plugins.buddyfinder.core.*;
/**
*
* @author Chris Denham, Knowledge Media Institute, Open University, United Kingdom
*/
public class BSBuddyFinderWindow extends DockableWindow implements ActionListener, MouseListener {
private BSBuddyFinderWinManager buddyFinderWinManager = null;
private String jidStr;
private String userid;
private JPanel mainPanel;
private BSBuddyFinderPanel finderPanel = new BSBuddyFinderPanel();
private JPopupMenu jidPopupMenu = new JPopupMenu();
private BSJIDActionMenuItem chatMenuItem = new BSJIDActionMenuItem("Chat");
private BSJIDActionMenuItem msgMenuItem = new BSJIDActionMenuItem("Send Message");
private JMenuItem presenceMenuItem = new JMenuItem();
JPanel buttonPanel;
JButton closeButton;
JButton dockButton;
/** Constructor */
BSBuddyFinderWindow(Window parent, BSBuddyFinderWinManager winMan, String ID,
String title, String jidStr, Image icon, boolean docked) {
super(ID, title, icon, new Dimension(450, 400), docked, winMan);
this.jidStr = jidStr;
userid = ((BSMainFrame)parent).username + "@" + ((BSMainFrame)parent).server;
this.buddyFinderWinManager = winMan;
finderPanel.setBuddyFinderWindow(this);
finderPanel.results.addMouseListener(this);
initComponents();
}
/** Returns icon for given presence (with emphasis as required) */
protected Icon getIconForPresence(JID jid) {
// *** what about people who are not in roster !!!
BSPresenceInfo pi = getPresenceBean().getResourcePresence(jid);
if (pi == null) pi = new BSPresenceInfo(jid, false, null, null);
Icon icon = BSJIDLabel.getIconForPresence(pi);
return icon;
}
public void buddyFinderResponse(Collection users)
{
// This is a very kludgy approach to directing results based on
// first user record containing a particular string. Baaad!
// (awaiting implementation of new XML packet type)
Iterator i = users.iterator();
if (i.hasNext())
{
String header = (String) i.next();
String keysig = "keywords = ";
if (header.startsWith(keysig)) {
finderPanel.keywords.setText(header.substring(keysig.length()));
return;
}
String querysig = "query = ";
if (header.startsWith(querysig)) {
String query = header.substring(querysig.length()).trim();
if (!query.equals("null"))
{
finderPanel.autogenQuery.setText(query);
finderPanel.testQuery.setText(query);
}
return;
}
if (header.equals("mode = automatic")) {
finderPanel.autogenCheckBox.setSelected(true);
return;
}
if (header.equals("mode = manual")) {
finderPanel.autogenCheckBox.setSelected(false);
return;
}
String urlsig = "URLs";
if (header.startsWith(urlsig))
{
String urllist = header.substring(urlsig.length() + 1);
finderPanel.URLs.setText(urllist);
return;
}
if (header.startsWith("automatic url publishing")) return;
}
Vector jidList = new Vector();
Iterator it = users.iterator();
while (it.hasNext())
{
String user = (String)it.next();
if (user.indexOf("@") == -1) continue;
String nick = null;
JID jid = new JID(user);
if (getRosterBean() != null) nick = getRosterBean().getFriendlyName(jid);
if (nick == null) nick = new StringTokenizer(jid.toString(), "@").nextToken();
//System.out.println("{\"" + jid + "\",\"" + nick + "\"},");
JLabel label = new BSJIDLabel(jid, nick, getIconForPresence(jid));
label.setText(nick);
label.setHorizontalAlignment(SwingConstants.LEFT);
jidList.add(label);
}
finderPanel.results.setListData(jidList);
if (jidList.size() == 0)
{
JOptionPane.showMessageDialog(this,
"Sorry, no records matched the query.",
"BuddyFinder",
JOptionPane.INFORMATION_MESSAGE);
}
}
/** Shows popup menu if supposed to */
private void maybeShowPopup(MouseEvent e) {
// if that was context popup event
if (e.isPopupTrigger()) {
Object src = e.getSource();
JList list = (JList)src;
Object item = list.getSelectedValue();
if (item instanceof BSJIDLabel) {
BSJIDLabel label = (BSJIDLabel)item;
JID jid = label.getJID();
chatMenuItem.setJID(jid);
msgMenuItem.setJID(jid);
BSPresenceInfo pi = getPresenceBean().getResourcePresence(jid);
if (pi == null) pi = new BSPresenceInfo(jid, false, null, null);
String status = pi.getStatus();
if (status == null) status = "";
presenceMenuItem.setText(pi.getFriendlyShow() + " - " + status);
presenceMenuItem.setIcon(label.getIcon());
jidPopupMenu.show(e.getComponent(), e.getX(), e.getY());
}
} //if(popup)
}
private void maybeOpenChatWindow(MouseEvent e) {
JList list = (JList)e.getSource();
Object o = list.getSelectedValue();
if (o instanceof BSJIDLabel)
{
BSJIDLabel label = (BSJIDLabel)o;
buddyFinderWinManager.openChat(label.getJID());
}
}
/** <code>MouseListener</code> method - catches double-clicks */
public void mouseClicked(MouseEvent e) {
// handles only double clicks on JID nodes
if ( e.getClickCount() == 2 ) {
maybeOpenChatWindow(e);
}
}
/** <code>MouseListener</code> method - catches popup-menu clicks */
public void mousePressed(MouseEvent e) {
if (!(e.getSource() instanceof JList)) return;
JList list = (JList)e.getSource();
int index = list.locationToIndex(e.getPoint());
list.setSelectedIndex(index); // just making sure right-click selects too.
maybeShowPopup(e);
}
/** <code>MouseListener</code> method - catches popup-menu clicks */
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
/** <code>MouseListener</code> method - empty implementation */
public void mouseEntered(MouseEvent e) { }
/** <code>MouseListener</code> method - empty implementation */
public void mouseExited(MouseEvent e) { }
public BSBuddyFinderBean getBuddyFinderBean() {
return buddyFinderWinManager.buddyFinderBean;
}
public BSRosterBean getRosterBean() {
return buddyFinderWinManager.rosterBean;
}
public BSPresenceBean getPresenceBean() {
return buddyFinderWinManager.presenceBean;
}
/** Inits GUI components */
private void initComponents() {
mainPanel = new JPanel(new BorderLayout());
//*** button panel ***
buttonPanel = new JPanel();
closeButton = new JButton();
closeButton.setText("Close");
closeButton.addActionListener(this);
buttonPanel.add(closeButton);
JPanel checkBoxesPanel = new JPanel();
Icon icon = new ImageIcon(ClassLoader.getSystemResource(!docked?
"images/dock.gif" : "images/float.gif"));
dockButton = new JButton(icon);
dockButton.setToolTipText(docked? "Float" : "Dock");
dockButton.addActionListener(this);
checkBoxesPanel.add(dockButton);
if (!OSVersion.isJava1Point4orHigher())
dockButton.setEnabled(false);
finderPanel.JID.setText(userid);
mainPanel.add(checkBoxesPanel, BorderLayout.NORTH);
mainPanel.add(finderPanel, BorderLayout.CENTER);
mainPanel.add(buttonPanel, BorderLayout.SOUTH);
setLayout(new BorderLayout());
add(mainPanel, BorderLayout.CENTER);
jidPopupMenu.add(chatMenuItem);
chatMenuItem.addActionListener(this);
jidPopupMenu.add(msgMenuItem);
msgMenuItem.addActionListener(this);
jidPopupMenu.add(new JSeparator());
jidPopupMenu.add(presenceMenuItem);
}
public boolean getSearchNames() {
return 1 == this.finderPanel.searchoption.getSelectedIndex();
}
public boolean getShowOffline() {
return this.finderPanel.showOffline.isSelected();
}
public String getKeywordSearch() {
return this.finderPanel.keysearch.getText();
}
public void close()
{
super.close();
}
/** Handles actions from GUI controls */
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
// close
if (source == closeButton) {
winMan.closeWindow(this);
}
else if (source == dockButton) {
if (winMan != null) {
winMan.setWindowDocked(this, !docked, true);
Icon icon = new ImageIcon(ClassLoader.getSystemResource(!docked?
"images/dock.gif" : "images/float.gif"));
dockButton.setIcon(icon);
dockButton.setToolTipText(docked? "Float" : "Dock");
winMan.selectWindow(this);
}
}
else if (source == chatMenuItem) {
buddyFinderWinManager.openChat(chatMenuItem.getJID());
}
else if (source == msgMenuItem) {
buddyFinderWinManager.sendMessage(msgMenuItem.getJID());
}
}
public void cancelListening() {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -