bookmarksui.java.svn-base
来自「开源项目openfire的完整源程序」· SVN-BASE 代码 · 共 607 行 · 第 1/2 页
SVN-BASE
607 行
/**
* $Revision: $
* $Date: $
*
* Copyright (C) 2006 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Lesser Public License (LGPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.spark.ui.conferences;
import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smackx.bookmark.BookmarkManager;
import org.jivesoftware.smackx.bookmark.BookmarkedConference;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.packet.DiscoverInfo;
import org.jivesoftware.smackx.packet.DiscoverItems;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.component.JiveTreeCellRenderer;
import org.jivesoftware.spark.component.JiveTreeNode;
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.component.Tree;
import org.jivesoftware.spark.plugin.ContextMenuListener;
import org.jivesoftware.spark.util.GraphicUtils;
import org.jivesoftware.spark.util.ResourceUtils;
import org.jivesoftware.spark.util.SwingTimerTask;
import org.jivesoftware.spark.util.SwingWorker;
import org.jivesoftware.spark.util.TaskEngine;
import org.jivesoftware.spark.util.log.Log;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TimerTask;
import java.util.Collections;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
/**
* BookmarkedConferences is used to display the UI for all bookmarked conference rooms.
*/
public class BookmarksUI extends JPanel {
private Tree tree;
private JiveTreeNode rootNode;
private Collection mucServices;
private Set<String> autoJoinRooms = new HashSet<String>();
private List listeners = new ArrayList();
private BookmarkManager manager;
/**
* Initialize Conference UI.
*/
public BookmarksUI() {
setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
setLayout(new GridBagLayout());
add(getServicePanel(), new GridBagConstraints(0, 0, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
rootNode = new JiveTreeNode("Conference Services");
tree = new Tree(rootNode) {
protected void setExpandedState(TreePath path, boolean state) {
// Ignore all collapse requests; collapse events will not be fired
if (state) {
super.setExpandedState(path, state);
}
}
};
tree.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent mouseEvent) {
tree.setCursor(GraphicUtils.HAND_CURSOR);
}
public void mouseExited(MouseEvent mouseEvent) {
tree.setCursor(GraphicUtils.DEFAULT_CURSOR);
}
});
JScrollPane scrollPane = new JScrollPane(tree);
add(scrollPane, new GridBagConstraints(0, 2, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
// Add all registered services.
addRegisteredServices();
tree.setCellRenderer(new JiveTreeCellRenderer());
tree.putClientProperty("JTree.lineStyle", "None");
tree.setRootVisible(false);
tree.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent mouseEvent) {
if (mouseEvent.getClickCount() == 2) {
TreePath path = tree.getPathForLocation(mouseEvent.getX(), mouseEvent.getY());
if (path == null) {
return;
}
JiveTreeNode node = (JiveTreeNode)path.getLastPathComponent();
if (node != null && node.getAllowsChildren()) {
browseRooms((String)node.getUserObject());
}
else if (node != null) {
String roomJID = node.getAssociatedObject().toString();
ConferenceUtils.joinConferenceOnSeperateThread(node.getUserObject().toString(), roomJID, null);
}
}
}
public void mouseReleased(MouseEvent mouseEvent) {
checkPopup(mouseEvent);
}
public void mousePressed(MouseEvent mouseEvent) {
checkPopup(mouseEvent);
}
}
);
setBackground(Color.white);
try {
manager = BookmarkManager.getBookmarkManager(SparkManager.getConnection());
}
catch (XMPPException e) {
Log.error(e);
}
final TimerTask bookmarkTask = new SwingTimerTask() {
public void doRun() {
try {
setBookmarks(manager.getBookmarkedConferences());
}
catch (XMPPException error) {
Log.error(error);
}
}
};
TaskEngine.getInstance().schedule(bookmarkTask, 5000);
}
private void checkPopup(MouseEvent mouseEvent) {
// Handle no path for x y coordinates
if (tree.getPathForLocation(mouseEvent.getX(), mouseEvent.getY()) == null) {
return;
}
final JiveTreeNode node = (JiveTreeNode)tree.getPathForLocation(mouseEvent.getX(), mouseEvent.getY()).getLastPathComponent();
if (mouseEvent.isPopupTrigger() && node != null) {
JPopupMenu popupMenu = new JPopupMenu();
// Define service actions
Action browseAction = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
browseRooms(node.toString());
}
};
browseAction.putValue(Action.NAME, Res.getString("menuitem.browse.service"));
browseAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.SMALL_DATA_FIND_IMAGE));
Action removeServiceAction = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
DefaultTreeModel treeModel = (DefaultTreeModel)tree.getModel();
treeModel.removeNodeFromParent(node);
}
};
removeServiceAction.putValue(Action.NAME, Res.getString("menuitem.remove.service"));
removeServiceAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.SMALL_DELETE));
JMenuItem browseServiceMenu = new JMenuItem(browseAction);
JMenuItem removeServiceMenu = new JMenuItem(removeServiceAction);
// Define room actions
Action joinRoomAction = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
String roomName = node.getUserObject().toString();
String roomJID = node.getAssociatedObject().toString();
ConferenceUtils.joinConferenceOnSeperateThread(roomName, roomJID, null);
}
};
joinRoomAction.putValue(Action.NAME, Res.getString("menuitem.join.room"));
joinRoomAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.SMALL_USER_ENTER));
Action removeRoomAction = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
DefaultTreeModel treeModel = (DefaultTreeModel)tree.getModel();
treeModel.removeNodeFromParent(node);
String roomJID = node.getAssociatedObject().toString();
autoJoinRooms.remove(roomJID);
removeBookmark(roomJID);
}
};
removeRoomAction.putValue(Action.NAME, Res.getString("menuitem.remove.bookmark"));
removeRoomAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.DELETE_BOOKMARK_ICON));
JMenuItem joinRoomMenu = new JMenuItem(joinRoomAction);
JMenuItem removeRoomMenu = new JMenuItem(removeRoomAction);
if (node != null && node.getAllowsChildren()) {
popupMenu.add(browseServiceMenu);
popupMenu.add(removeServiceMenu);
}
else if (node != null) {
popupMenu.add(joinRoomMenu);
popupMenu.add(removeRoomMenu);
popupMenu.addSeparator();
Action autoJoin = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
String roomJID = node.getAssociatedObject().toString();
if (autoJoinRooms.contains(roomJID)) {
autoJoinRooms.remove(roomJID);
}
else {
autoJoinRooms.add(roomJID);
}
String name = node.getUserObject().toString();
addBookmark(name, roomJID, autoJoinRooms.contains(roomJID));
}
};
autoJoin.putValue(Action.NAME, Res.getString("menuitem.join.on.startup"));
JCheckBoxMenuItem item = new JCheckBoxMenuItem(autoJoin);
String roomJID = node.getAssociatedObject().toString();
item.setSelected(autoJoinRooms.contains(roomJID));
popupMenu.add(item);
// Define service actions
Action roomInfoAction = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
String roomJID = node.getAssociatedObject().toString();
RoomBrowser roomBrowser = new RoomBrowser();
roomBrowser.displayRoomInformation(roomJID);
}
};
roomInfoAction.putValue(Action.NAME, Res.getString("menuitem.view.room.info"));
roomInfoAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.SMALL_DATA_FIND_IMAGE));
popupMenu.add(roomInfoAction);
}
// Fire menu listeners
fireContextMenuListeners(popupMenu, node);
// Display popup menu.
popupMenu.show(tree, mouseEvent.getX(), mouseEvent.getY());
}
}
public void browseRooms(String serviceName) {
ConferenceRoomBrowser rooms = new ConferenceRoomBrowser(this, serviceName);
rooms.invoke();
}
private void addRegisteredServices() {
SwingWorker worker = new SwingWorker() {
public Object construct() {
try {
if (SparkManager.getConnection().isConnected()) {
mucServices = MultiUserChat.getServiceNames(SparkManager.getConnection());
}
}
catch (XMPPException e) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?