📄 applestatusmenu.java
字号:
/** * Copyright (C) 1999-2004 Jive Software. All rights reserved. * * This software is the proprietary information of Jive Software. Use is subject to license terms. */package com.jivesoftware.spark.plugin.apple;import com.apple.cocoa.application.*;import com.apple.cocoa.foundation.NSSelector;import org.jivesoftware.smack.Roster;import org.jivesoftware.smack.RosterEntry;import org.jivesoftware.smack.RosterListener;import org.jivesoftware.smack.packet.Presence;import org.jivesoftware.smack.util.StringUtils;import org.jivesoftware.spark.ChatManager;import org.jivesoftware.spark.SparkManager;import org.jivesoftware.spark.Workspace;import org.jivesoftware.spark.ui.ChatFrame;import org.jivesoftware.spark.ui.ChatRoom;import org.jivesoftware.spark.ui.PresenceListener;import org.jivesoftware.spark.ui.status.StatusItem;import org.jivesoftware.spark.util.log.Log;import java.awt.Frame;import java.util.Collection;import java.util.Hashtable;import java.util.Iterator;import javax.swing.SwingUtilities;/** * @author Andrew Wright */public class AppleStatusMenu implements RosterListener, PresenceListener { private final NSMenu contactMenu; private final Hashtable entries; private final NSStatusItem statusItem; private final NSMenuItem freeToChatItem; private final NSMenuItem availableItem; private final NSMenuItem awayItem; private final NSMenuItem extendedAwayItem; private final NSMenuItem doNotDisturbItem; private NSStatusBar bar; public AppleStatusMenu() { entries = new Hashtable(); Roster roster = SparkManager.getConnection().getRoster(); roster.addRosterListener(this); this.contactMenu = new NSMenu(); NSMenuItem item = new NSMenuItem(); item.setTitle("My Status:"); item.setEnabled(false); contactMenu.addItem(item); freeToChatItem = new NSMenuItem(); freeToChatItem.setEnabled(true); freeToChatItem.setTitle("Free To Chat"); freeToChatItem.setTarget(this); freeToChatItem.setAction(new NSSelector("handleStatusChange", new Class[]{NSMenuItem.class})); freeToChatItem.setImage(AppleUtils.getImage("/images/im_free_chat.png")); contactMenu.addItem(freeToChatItem); availableItem = new NSMenuItem(); availableItem.setEnabled(true); availableItem.setTitle("Available"); availableItem.setTarget(this); availableItem.setAction(new NSSelector("handleStatusChange", new Class[]{NSMenuItem.class})); availableItem.setImage(AppleUtils.getImage("/images/green-ball.png")); contactMenu.addItem(availableItem); awayItem = new NSMenuItem(); awayItem.setEnabled(true); awayItem.setTitle("Away"); awayItem.setTarget(this); awayItem.setAction(new NSSelector("handleStatusChange", new Class[]{NSMenuItem.class})); awayItem.setImage(AppleUtils.getImage("/images/im_away.png")); contactMenu.addItem(awayItem); extendedAwayItem = new NSMenuItem(); extendedAwayItem.setEnabled(true); extendedAwayItem.setTitle("Extended Away"); extendedAwayItem.setTarget(this); extendedAwayItem.setAction(new NSSelector("handleStatusChange", new Class[]{NSMenuItem.class})); extendedAwayItem.setImage(AppleUtils.getImage("/images/im_away.png")); contactMenu.addItem(extendedAwayItem); doNotDisturbItem = new NSMenuItem(); doNotDisturbItem.setEnabled(true); doNotDisturbItem.setTitle("Do Not Disturb"); doNotDisturbItem.setTarget(this); doNotDisturbItem.setAction(new NSSelector("handleStatusChange", new Class[]{NSMenuItem.class})); doNotDisturbItem.setImage(AppleUtils.getImage("/images/im_dnd.png")); contactMenu.addItem(doNotDisturbItem); Workspace workspace = SparkManager.getWorkspace(); Presence presence = workspace.getStatusBar().getPresence(); if (workspace != null) { if (Presence.Mode.chat.equals(presence.getMode())) { freeToChatItem.setState(NSCell.OnState); availableItem.setState(NSCell.OffState); awayItem.setState(NSCell.OffState); extendedAwayItem.setState(NSCell.OffState); doNotDisturbItem.setState(NSCell.OffState); } else if (Presence.Mode.available.equals(presence.getMode())) { freeToChatItem.setState(NSCell.OffState); availableItem.setState(NSCell.OnState); awayItem.setState(NSCell.OffState); extendedAwayItem.setState(NSCell.OffState); doNotDisturbItem.setState(NSCell.OffState); } else if (Presence.Mode.away.equals(presence.getMode())) { freeToChatItem.setState(NSCell.OffState); availableItem.setState(NSCell.OffState); awayItem.setState(NSCell.OnState); extendedAwayItem.setState(NSCell.OffState); doNotDisturbItem.setState(NSCell.OffState); } else if (Presence.Mode.xa.equals(presence.getMode())) { freeToChatItem.setState(NSCell.OffState); availableItem.setState(NSCell.OffState); awayItem.setState(NSCell.OffState); extendedAwayItem.setState(NSCell.OnState); doNotDisturbItem.setState(NSCell.OffState); } else if (Presence.Mode.dnd.equals(presence.getMode())) { freeToChatItem.setState(NSCell.OffState); availableItem.setState(NSCell.OffState); awayItem.setState(NSCell.OffState); extendedAwayItem.setState(NSCell.OffState); doNotDisturbItem.setState(NSCell.OnState); } } contactMenu.addItem(item.separatorItem()); populateMenu(roster); bar = NSStatusBar.systemStatusBar(); statusItem = bar.statusItem(NSStatusBar.VariableStatusItemLength); statusItem.setImage(AppleUtils.getImage("/images/black-spark.gif")); statusItem.setHighlightMode(true); statusItem.setMenu(contactMenu); statusItem.setEnabled(false); SparkManager.getSessionManager().addPresenceListener(this); } public void display() { statusItem.setEnabled(true); } public void showBlackIcon() { statusItem.setImage(AppleUtils.getImage("/images/black-spark.gif")); } public void showActiveIcon() { statusItem.setImage(AppleUtils.getImage("/images/spark-16x16.png")); } /** * Called when NEW entries are added. * * @param addresses the addressss added. */ public void entriesAdded(final Collection addresses) { SwingUtilities.invokeLater(new Runnable() { public void run() { Roster roster = SparkManager.getConnection().getRoster(); Iterator jids = addresses.iterator(); while (jids.hasNext()) { String jid = (String)jids.next(); RosterEntry entry = roster.getEntry(jid); addEntry(entry); } } }); } public void entriesUpdated(final Collection addresses) { } public void entriesDeleted(final Collection addresses) { SwingUtilities.invokeLater(new Runnable() { public void run() { Roster roster = SparkManager.getConnection().getRoster(); Iterator jids = addresses.iterator(); while (jids.hasNext()) { String jid = (String)jids.next(); RosterEntry entry = roster.getEntry(jid); removeEntry(entry); } } }); } public void presenceChanged(final String user) { SwingUtilities.invokeLater(new Runnable() { public void run() { Roster roster = SparkManager.getConnection().getRoster(); Presence presence = roster.getPresence(user); if (Presence.Mode.away.equals(presence.getMode())) { RosterEntry entry = roster.getEntry(user); removeEntry(entry); } else if (Presence.Mode.available.equals(presence.getMode()) ||
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -