⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setstatusmenu.java

📁 JBother是纯Java开发的Jabber(即时消息开源软件)客户端。支持群组聊天
💻 JAVA
字号:
/* *  Copyright (C) 2003 Adam Olsen *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 1, or (at your option) *  any later version. *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */package com.valhalla.jbother.menus;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.*;import java.util.Iterator;import java.util.Locale;import java.util.ResourceBundle;import javax.swing.*;import org.jivesoftware.smack.packet.Presence;import com.valhalla.jbother.*;import com.valhalla.gui.*;import com.valhalla.jbother.jabber.BuddyStatus;import com.valhalla.jbother.jabber.SelfStatus;import com.valhalla.jbother.jabber.SelfStatuses;import com.valhalla.settings.Settings;/** * Allows the user to change his/her status * * @author Adam Olsen * @author Yury Soldak (tail) * @autho Andrey Zakirov * @created April 10, 2005 * @version 1.6 */public class SetStatusMenu extends JPopupMenu {	private BuddyList blist;	private ResourceBundle resources = ResourceBundle.getBundle(			"JBotherBundle", Locale.getDefault());	private SelfStatuses statuses = com.valhalla.jbother.jabber.SelfStatuses			.getInstance();	private ImageIcon current = null;	private javax.swing.Timer blinkTimer = null;	private boolean useIcon = false;	private JButton button = new JButton();	/**	 * Sets up the SetStatusMenu	 *	 * @param blist	 *            the BuddyList that this menu is attached to	 */	public SetStatusMenu(BuddyList blist, boolean useIcon, JButton button) {		this.button = button;		this.blist = blist;		this.useIcon = useIcon;		Iterator statusIterator = statuses.getContent().iterator();		SelfStatus curStatus;		while (statusIterator.hasNext()) {			curStatus = (SelfStatus) statusIterator.next();			JCheckBoxMenuItem item = new JCheckBoxMenuItem(curStatus.getTitle());			if (curStatus.getMode() == blist.getCurrentPresenceMode()) {				item.setState(true);			}			add(item);		}		if (useIcon) {			button.setIcon(StatusIconCache.getStatusIcon(Presence.Mode.AVAILABLE));		}        button.setText ( blist.getCurrentStatusString ());		if (System.getProperty("mrj.version") != null) {			button.setText(resources.getString("status"));		}		if (Settings.getInstance().getProperty("statusTheme") == null) {			Settings.getInstance().setProperty("statusTheme", "default");		}		reloadStatusIcons();		setUpListeners();	}    public SetStatusMenu(BuddyList blist, boolean useIcon)    {        this(blist,useIcon,BuddyList.getInstance().getStatusButton());    }	/**	 * starts the blink timer	 */	public void startBlinkTimer() {		current = (ImageIcon) button.getIcon();		blinkTimer = new javax.swing.Timer(400, new BlinkHandler());		blinkTimer.start();	}	/**	 * @return true if the blink timer is still running	 */	public boolean blinkTimerIsRunning() {		if (blinkTimer != null && blinkTimer.isRunning())			return true;		else			return false;	}	/**	 * stops the blink timer	 */	public void stopBlinkTimer() {		if (blinkTimer != null)			blinkTimer.stop();		blinkTimer = null;		if (useIcon)			button.setIcon(current);	}	class BlinkHandler implements ActionListener {		private ImageIcon off = StatusIconCache.getStatusIcon(null);		private ImageIcon on = StatusIconCache				.getStatusIcon(Presence.Mode.AVAILABLE);		private ImageIcon current = on;		public void actionPerformed(ActionEvent e) {			if (current == on)				current = off;			else if (current == off)				current = on;			if (useIcon)				button.setIcon(current);		}	}	/**	 * Loads self statuses (information about the current online user) and	 * creates a tooltip on the SetStatusMenu with this information	 */	public void loadSelfStatuses() {		if (!blist.checkConnection())			return;		if (useIcon) {			button.setIcon(StatusIconCache.getStatusIcon(BuddyList.getInstance()					.getCurrentPresenceMode()));		}		String me = blist.getConnection().getUser().replaceAll("/.*", "");		BuddyStatus buddy = blist.getBuddyStatus(me);		String user = buddy.getUser();		String server = buddy.getUser();		if (user.indexOf('@') > -1) {			String parts[] = new String[2];			parts = buddy.getUser().split("@");			user = parts[0];			server = parts[0];			if (parts[1] != null) {				server = parts[1];			}		}		String resources = "";		Iterator i = buddy.keySet().iterator();		int resourceCount = 0;		while (i.hasNext()) {			String key = (String) i.next();			if (!key.equals("N/A")) {				boolean add = false;				if (key.equals(buddy.getHighestResource())) {					add = true;				} else {					resources += "  ";				}				resources += key + " (" + buddy.get(key) + ")";				if (add) {					resources += " <b>*</b>";				}				if (i.hasNext()) {					resources += "<br>";				}				resourceCount++;			}		}		String tooltip = "<html><table border='0'><tr><td colspan='2'><b><font size='+1'>"				+ user				+ "</font></b><table border='0' cellpadding='2' cellspacing='2'><tr><td nowrap><b>"				+ this.resources.getString("server")				+ ":</b></td><td nowrap>"				+ server + "</td></tr>";		if (resourceCount > 0) {			tooltip += "<tr><td nowrap valign=\"top\"><b>"					+ this.resources.getString("pluralResources")					+ ":</b></td><td nowrap>" + resources + "</td></tr>";		}		String statusMessage = blist.getCurrentStatusString();		if (statusMessage != null && !statusMessage.equals("")) {			tooltip += "<tr><td nowrap><b>"					+ this.resources.getString("currentStatusMessage")					+ ":</b></td><td nowrap>" + statusMessage					+ "</td></tr></table></td></tr></table></html>";		}		button.setToolTipText(tooltip);	}	/**	 * Reloads the status icons (in case the theme changes, etc)	 */	public void reloadStatusIcons() {		Iterator statusIterator = statuses.getContent().iterator();		Presence.Mode mode;		SelfStatus current;		int i = 0;		while (statusIterator.hasNext()) {			current = (SelfStatus) statusIterator.next();			mode = current.getMode();			((JMenuItem) this.getComponent (i)) .setIcon(StatusIconCache.getStatusIcon(mode));			if (blist != null && mode == blist.getCurrentPresenceMode()) {				((JMenuItem) this.getComponent (i)) .setSelected(true);				if (useIcon)					button.setIcon(StatusIconCache.getStatusIcon(mode));			} else {				((JMenuItem) this.getComponent (i)) .setSelected(false);			}			i++;		}	}	/**	 * Sets the checked item to the mode represented	 *	 * @param mode	 *            the mode to check	 */	public void setModeChecked(Presence.Mode mode) {		Iterator statusIterator = statuses.getContent().iterator();		int i = 0;		while (statusIterator.hasNext()) {			SelfStatus current = (SelfStatus) statusIterator.next();			Presence.Mode m = current.getMode();			if (m == mode) {				((JMenuItem) this.getComponent (i)) .setSelected(true);				if (useIcon)					button.setIcon(StatusIconCache.getStatusIcon(mode));			} else {				((JMenuItem) this.getComponent (i)) .setSelected(false);			}			i++;		}        if(mode==null)button.setText( resources.getString("offline"));   		else button.setText ( resources.getString ( mode.toString ()) );        button.repaint();		repaint();	}	/**	 * Sets this menus icon	 *	 * @param mode	 *            the mode that the icon represents	 */	public void setIcon(Presence.Mode mode) {//        if (useIcon)//            super.setIcon(StatusIconCache.getStatusIcon(mode));	}	/**	 * Sets up the various event listeners in the menu	 */	private void setUpListeners() {		MenuListener listener = new MenuListener();		for (int i = 0; i < getComponentCount (); i++) {			((JMenuItem) this.getComponent (i)) .addActionListener(listener);		}	}	/**	 * Unchecks all the items in this menu except the one currently being used	 *	 * @param item	 *            Description of the Parameter	 */	private void uncheckAll(JCheckBoxMenuItem item) {		JCheckBoxMenuItem curItem;		com.valhalla.Logger.debug("Unckecking all but " + item);		for (int i = 0; i < getComponentCount (); i++) {			curItem = (JCheckBoxMenuItem) ((JMenuItem) this.getComponent (i)) ;			if (curItem != item) {				if (curItem.getState()) {					curItem.setState(false);				}			} else {				if (!curItem.getState()) {					curItem.setState(true);				}			}		}	}	/**	 * Sets the current status	 *	 * @param item	 *            which item was clicked	 * @param mode	 *            the mode to change to	 * @param defaultMessage	 *            the default message to pick	 * @param getMessage	 *            set to true if the user should specify a message	 */	private void setStatus(JCheckBoxMenuItem item, Presence.Mode mode,			String defaultMessage, boolean getMessage) {		blist.setStatus(mode, defaultMessage, getMessage);	}	protected void signOffHandler() {		button.setText ( resources.getString ( "offline" ));		setModeChecked(null);		if (blinkTimerIsRunning())			stopBlinkTimer();		if (BuddyList.getInstance().checkConnection()) {			ConnectorThread.getInstance().setCancelled(true);			BuddyList.getInstance().signOff();		}	}	/**	 * Listens for items in the menu to be clicked	 *	 * @author Adam Olsen	 * @created November 11, 2004	 * @version 1.0	 */	class MenuListener implements ActionListener {		/**		 * Description of the Method		 *		 * @param e		 *            Description of the Parameter		 */		public void actionPerformed(ActionEvent e) {            if( ProfileManager.isCurrentlyShowing() )            {                setModeChecked(null);                Standard.warningMessage( null, resources.getString("profileManager"), resources.getString("mustChooseProfile"));                return;            }			JCheckBoxMenuItem item = (JCheckBoxMenuItem) e.getSource();			SelfStatus status = statuses.getStatus(item.getText());			if (status.getMode() == null) {				ConnectorThread.getInstance().setCancelled(true);				signOffHandler();			} else {				ConnectorThread.getInstance().setCancelled(false);				setStatus(item, status.getMode(), status.getTitle(), true);			}		}	}	public void showMenu( Component tree, int x, int y)	{	   show( tree, x, y );	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -