📄 nicklistpopupmenu.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.groupchat;import java.awt.Component;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Locale;import java.util.ResourceBundle;import javax.swing.JMenu;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.SwingUtilities;import org.jivesoftware.smack.XMPPException;import org.jivesoftware.smackx.packet.MUCUser;import com.valhalla.jbother.JBotherLoader;import com.valhalla.jbother.jabber.BuddyStatus;import com.valhalla.jbother.jabber.MUCBuddyStatus;import com.valhalla.jbother.menus.BuddyListPopupMenu;/** * The menu that pops up if someone right clicks on a user in a groupchat * * @author Adam Olsen * @version 1.0 */public class NickListPopupMenu extends BuddyListPopupMenu { private ResourceBundle resources = ResourceBundle.getBundle( "JBotherBundle", Locale.getDefault()); private ChatRoomPanel panel; private JMenuItem grantAdmin = new JMenuItem(resources .getString("grantAdmin")), grantMembership = new JMenuItem( resources.getString("grantMembership")), grantModerator = new JMenuItem(resources .getString("grantModerator")), grantOwnership = new JMenuItem(resources .getString("grantOwnership")), grantVoice = new JMenuItem( resources.getString("grantVoice")), revokeAdmin = new JMenuItem(resources.getString("revokeAdmin")), revokeMembership = new JMenuItem(resources .getString("revokeMembership")), revokeModerator = new JMenuItem(resources .getString("revokeModerator")), revokeOwnership = new JMenuItem(resources .getString("revokeOwnership")), revokeVoice = new JMenuItem(resources.getString("revokeVoice")), kick = new JMenuItem(resources.getString("kickParticipant")), ban = new JMenuItem(resources.getString("banParticipant")); private JMenu adminMenu = new JMenu(resources.getString("administration")); /** * Sets up the popup menu */ public NickListPopupMenu(ChatRoomPanel panel) { removeAll(); MenuActionListener listener = new MenuActionListener(); this.panel = panel; grantAdmin.addActionListener(listener); grantMembership.addActionListener(listener); grantModerator.addActionListener(listener); grantOwnership.addActionListener(listener); grantVoice.addActionListener(listener); revokeAdmin.addActionListener(listener); revokeMembership.addActionListener(listener); revokeModerator.addActionListener(listener); revokeOwnership.addActionListener(listener); revokeVoice.addActionListener(listener); kick.addActionListener(listener); ban.addActionListener(listener); add(chatItem); add(messageItem); add(infoItem); add(logItem); add(sendFileItem); addSeparator(); add(adminMenu); if (JBotherLoader.isGPGEnabled()) addSeparator(); grantAdmin.setActionCommand("grantAdmin"); grantMembership.setActionCommand("grantMembership"); grantModerator.setActionCommand("grantModerator"); grantOwnership.setActionCommand("grantOwnership"); grantVoice.setActionCommand("grantVoice"); revokeAdmin.setActionCommand("revokeAdmin"); revokeMembership.setActionCommand("revokeMembership"); revokeModerator.setActionCommand("revokeModerator"); revokeOwnership.setActionCommand("revokeOwnership"); revokeVoice.setActionCommand("revokeVoice"); adminMenu.add(grantAdmin); adminMenu.add(grantMembership); adminMenu.add(grantModerator); adminMenu.add(grantOwnership); adminMenu.add(grantVoice); adminMenu.addSeparator(); adminMenu.add(revokeAdmin); adminMenu.add(revokeMembership); adminMenu.add(revokeModerator); adminMenu.add(revokeOwnership); adminMenu.add(revokeVoice); adminMenu.addSeparator(); adminMenu.add(kick); adminMenu.add(ban); } protected String getFrom() { return panel.getUser(); } /** * Listens for a double mouse click, or a right click * * @author Adam Olsen * @version 1.0 */ class MenuActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getSource() == kick) { String result = (String) JOptionPane.showInputDialog(null, resources.getString("enterReason"), resources .getString("kickParticipant"), JOptionPane.QUESTION_MESSAGE, null, null, "No reason"); if (result == null) return; Thread thread = new Thread(new KickThread(result)); thread.start(); } else if (e.getSource() == ban) { String result = (String) JOptionPane.showInputDialog(null, resources.getString("enterReason"), resources .getString("banParticipant"), JOptionPane.QUESTION_MESSAGE, null, null, "No reason"); if (result == null) return; Thread thread = new Thread(new BanThread(result)); thread.start(); } // MUC stuff else { JMenuItem item = (JMenuItem) e.getSource(); panel.doAction(item.getActionCommand(), (MUCBuddyStatus) buddy); } } } class KickThread implements Runnable { String reason; public KickThread(String reason) { this.reason = reason; } public void run() { com.valhalla.Logger.debug("kicking " + buddy.getUser()); try { panel.getChat().kickParticipant(buddy.getName(), reason); } catch (final XMPPException ex) { SwingUtilities.invokeLater(new Runnable() { public void run() { String message = ""; if (ex.getXMPPError() != null) { message = resources.getString("xmppError" + ex.getXMPPError().getCode()); } else message = ex.getMessage(); panel.serverNoticeMessage(message); } }); } } } class BanThread implements Runnable { String reason; public BanThread(String reason) { this.reason = reason; } public void run() { MUCUser user = ((MUCBuddyStatus) buddy).getMUCUser(); if (user == null) return; MUCUser.Item item = user.getItem(); if (item == null) return; String jid = item.getJid(); if (jid == null) return; try { panel.getChat().banUser(jid, reason); } catch (final XMPPException ex) { SwingUtilities.invokeLater(new Runnable() { public void run() { String message = ""; if (ex.getXMPPError() != null) { message = resources.getString("xmppError" + ex.getXMPPError().getCode()); } else message = ex.getMessage(); panel.serverNoticeMessage(message); } }); } } } /** * Displays the popup menu * * @param comp * the component to pop the menu up on * @param x * the x coordinate * @param y * the y coordinate of the menu * @param buddy * the BuddyStatus that was clicked on */ public void showMenu(Component comp, int x, int y, BuddyStatus buddy) { this.buddy = buddy; if (JBotherLoader.isGPGEnabled()) { remove(unbindPubKeyItem); remove(bindPubKeyItem); if (buddy.getPubKey() != null && !(this instanceof NickListPopupMenu)) { add(unbindPubKeyItem); } else { add(bindPubKeyItem); } } validate(); show(comp, x, y); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -