📄 contactpanel.java
字号:
package openicq.gui;import java.awt.BorderLayout;import java.awt.Frame;import java.awt.event.*;import java.util.ArrayList;import java.util.Date;import javax.swing.*;import openicq.Start;import openicq.data.Resource;import openicq.net.*;import openicq.net.ShortUserInfo;import openicq.net.ShortUserInfoRequest;import org.javalib.document.RTFDocument;import org.javalib.sound.MediaPlayer;import JOscarLib.Integration.Event.*;import JOscarLib.Management.Contact;import JOscarLib.Management.ContactList;import JOscarLib.Setting.Enum.StatusModeEnum;import JOscarLib.Tool.OscarInterface;/** * The <code>ContactPanel</code> class is a panel which displays multiple * contacts. * @author Hansgeorg Schwibbe * @copyright 2004 */public class ContactPanel extends JPanel{ private MediaPlayer player = new MediaPlayer(); protected MainFrame mainFrame; protected ArrayList listChatFrames = new ArrayList(); protected ArrayList listIconSources = new ArrayList(); protected ArrayList listDisplayNames = new ArrayList(); protected ArrayList listContactIds = new ArrayList(); protected JScrollPane jScrollPaneContacts = new JScrollPane(); protected JList jListContacts = new JList(); protected IconManager manager; protected ContactPanelPopupMenu knownMenu; protected ContactPanelPopupMenu unknownMenu; /** * Initializes a new instance of the class <code>ContactPanel</code>. * @param parent the parent frame */ public ContactPanel(JFrame parent) { this.mainFrame = (MainFrame) parent; this.setSize(150, 105); this.setPreferredSize(this.getSize()); this.knownMenu = new ContactPanelPopupMenu(this); knownMenu.remove(knownMenu.jMenuItemAdd); this.unknownMenu = new ContactPanelPopupMenu(this); jListContacts.getSelectionModel() .setSelectionMode(ListSelectionModel.SINGLE_SELECTION); jListContacts.addMouseListener(new MouseListener() { public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseClicked(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() > 1) { action_openChat(); } else if (e.getButton() == MouseEvent.BUTTON3) { jListContacts.setSelectedIndex(jListContacts.locationToIndex(e.getPoint())); action_openPopupMenu(e); } } }); jListContacts.addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { if (e.getKeyChar() == KeyEvent.VK_ENTER) { action_openChat(); } } }); jScrollPaneContacts.getViewport().add(jListContacts, null); jScrollPaneContacts.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); this.setLayout(new BorderLayout()); this.add(jScrollPaneContacts, BorderLayout.CENTER); } /** * Initializes all contacts. */ public synchronized void initContacts() { int outer, inner, index, size, innerSize; boolean isIndexOf; Contact contact; ChatFrame chatFrame; listIconSources.clear(); listDisplayNames.clear(); listContactIds.clear(); synchronized (Start.env) { if (Start.env.getKnownList().getContactListSize() > 0) { String text = ((String[]) mainFrame.localized.get("contactPanel"))[0]; listDisplayNames.add(text); listContactIds.add("null"); listIconSources.add(null); size = Start.env.getKnownList().getContactListSize(); for (index = 0; index < size; index++) { contact = Start.env.getKnownList().get(index); switch (contact.getCurrentStatus().getMode()) { case StatusModeEnum.ONLINE: listIconSources.add(Resource.ICON_SOURCE_STATUS[0]); break; case StatusModeEnum.FREE_FOR_CHAT: listIconSources.add(Resource.ICON_SOURCE_STATUS[1]); break; case StatusModeEnum.AWAY: listIconSources.add(Resource.ICON_SOURCE_STATUS[2]); break; case StatusModeEnum.NA: listIconSources.add(Resource.ICON_SOURCE_STATUS[3]); break; case StatusModeEnum.OCCUPIED: listIconSources.add(Resource.ICON_SOURCE_STATUS[4]); break; case StatusModeEnum.DND: listIconSources.add(Resource.ICON_SOURCE_STATUS[5]); break; case StatusModeEnum.INVISIBLE: listIconSources.add(Resource.ICON_SOURCE_STATUS[6]); break; default: listIconSources.add(Resource.ICON_SOURCE_STATUS[7]); } listDisplayNames.add(Start.env.getDisplayName(contact)); listContactIds.add(contact.getContactId()); } } if (Start.env.getUnknownList().getContactListSize() > 0) { String text = ((String[]) mainFrame.localized.get("contactPanel"))[1]; listDisplayNames.add(text); listContactIds.add("null"); listIconSources.add(null); size = Start.env.getUnknownList().getContactListSize(); for (index = 0; index < size; index++) { listIconSources.add(Resource.ICON_SOURCE_STATUS[8]); contact = Start.env.getUnknownList().get(index); listDisplayNames.add(Start.env.getDisplayName(contact)); listContactIds.add(contact.getContactId()); } } size = listChatFrames.size(); for (index = 0; index < listChatFrames.size(); index++) { chatFrame = ((ChatFrame) listChatFrames.get(index)); if (!Start.env.getKnownList().contains(chatFrame.getContactId()) && !Start.env.getUnknownList().contains(chatFrame.getContactId())) { chatFrame.setVisible(false); chatFrame.doLayout(); listChatFrames.remove(index); index--; size--; } } listChatFrames.trimToSize(); size = Start.env.getKnownList().getContactListSize(); for (outer = 0; outer < size; outer++) { isIndexOf = false; contact = Start.env.getKnownList().get(outer); innerSize = listChatFrames.size(); for (inner = 0; inner < innerSize; inner++) { chatFrame = ((ChatFrame) listChatFrames.get(inner)); if (contact.getContactId().equals(chatFrame.getContactId())) { chatFrame.setContact(contact); isIndexOf = true; break; } } if (isIndexOf == false) { listChatFrames.add(new ChatFrame(Start.env.getKnownList().get(outer))); } } size = Start.env.getUnknownList().getContactListSize(); for (outer = 0; outer < size; outer++) { contact = Start.env.getUnknownList().get(outer); isIndexOf = false; innerSize = listChatFrames.size(); for (inner = 0; inner < innerSize; inner++) { chatFrame = ((ChatFrame) listChatFrames.get(inner)); if (contact.getContactId().equals(chatFrame.getContactId())) { chatFrame.setContact(contact); isIndexOf = true; break; } } if (isIndexOf == false) { listChatFrames.add(new ChatFrame(Start.env.getUnknownList() .get(outer))); } } } jListContacts.setListData(listDisplayNames.toArray()); if (manager != null) { manager.setIconSources(listIconSources, listContactIds.toArray()); } else { manager = new IconManager(jListContacts, listIconSources, listContactIds.toArray()); manager.startManager(); } mainFrame.settingsDialog.visibilityPanel.loadSettings(); } /** * Initializes all components of this panel. */ public synchronized void initAll() { synchronized (Start.env) { Start.env.getConnection().addStatusListener(new StatusListener() { public void onIncomingUser(IncomingUserEvent e) { action_onIncomingUser(e); } public void onOffgoingUser(OffgoingUserEvent e) { action_onOffgoingUser(e); } }); Start.env.getConnection().addMessagingListener(new MessagingListener() { public void onIncomingUrl(IncomingUrlEvent e) { action_onIncomingUrl(e); } public void onOfflineMessage(OfflineMessageEvent e) { action_onOfflineMessage(e); } public void onIncomingMessage(IncomingMessageEvent e) { action_onIncomingMessage(e); } }); if (Start.env.getConnection() != null && Start.env.getConnection().isLogged()) { Start.env.synchronizeServerContacts(); Start.env.setKnownList(Start.env.sortContactList(Start.env.getKnownList())); initContacts(); Start.env.sendKnownList(); OscarInterface.requestOfflineMessages(Start.env.getConnection()); } } } /** * Appends the specified contact to the list of known contacts. * @param contact the specified contact */ public void addContact(Contact contact) { synchronized (Start.env) { if (!Start.env.getKnownList().contains(contact.getContactId())) { Start.env.addKnownContact(contact); Start.env.setKnownList(Start.env.sortContactList(Start.env.getKnownList())); initContacts(); Start.env.sendKnownList(); int ownId = Integer.parseInt(Start.env.getOwnContact().getContactId()); ContactList updateList = new ContactList(); updateList.addToContactList(contact); contact.setIsInInvisibleList(true); new VisibilityBroadcast(Start.env.getConnection(), ownId, updateList); try { Thread.sleep(100); } catch (InterruptedException ie) { System.err.println(this.getClass().getName() + ": " + ie.toString()); } contact.setIsInInvisibleList(false); new VisibilityBroadcast(Start.env.getConnection(), ownId, updateList); } } } /**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -