statusbar.java.svn-base
来自「开源项目openfire的完整源程序」· SVN-BASE 代码 · 共 552 行 · 第 1/2 页
SVN-BASE
552 行
// Add change message
final JMenuItem changeStatusMenu = new JMenuItem(Res.getString("menuitem.set.status.message"), SparkRes.getImageIcon(SparkRes.BLANK_IMAGE));
popup.addSeparator();
popup.add(changeStatusMenu);
changeStatusMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CustomMessages.addCustomMessage();
}
});
Action editMessagesAction = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
CustomMessages.editCustomMessages();
}
};
editMessagesAction.putValue(Action.NAME, Res.getString("menuitem.edit.status.message"));
popup.add(editMessagesAction);
popup.show(statusPanel, 0, statusPanel.getHeight());
}
public void changeAvailability(final Presence presence) {
if (!presence.isAvailable()) {
return;
}
if ((presence.getMode() == currentPresence.getMode()) && (presence.getType() == currentPresence.getType()) && (presence.getStatus().equals(currentPresence.getStatus()))) {
PacketExtension pe = presence.getExtension("x", "vcard-temp:x:update");
if (pe != null) {
// Update VCard
loadVCard();
}
return;
}
final Runnable changePresenceRunnable = new Runnable() {
public void run() {
currentPresence = presence;
setStatus(presence.getStatus());
Icon icon = PresenceManager.getIconFromPresence(presence);
if (icon != null) {
statusPanel.setIcon(icon);
}
}
};
SwingUtilities.invokeLater(changePresenceRunnable);
}
/**
* Populates the current Dnd List.
*/
private void buildStatusItemList() {
for (Presence presence : PresenceManager.getPresences()) {
Icon icon = PresenceManager.getIconFromPresence(presence);
StatusItem item = new StatusItem(presence, icon);
statusList.add(item);
}
final Icon availableIcon = PresenceManager.getIconFromPresence(new Presence(Presence.Type.available));
// Set default presence icon (Avaialble)
statusPanel.setIcon(availableIcon);
}
public Collection getStatusList() {
return statusList;
}
public Presence getPresence() {
return currentPresence;
}
public StatusItem getStatusItem(String label) {
Iterator iter = statusList.iterator();
while (iter.hasNext()) {
StatusItem item = (StatusItem)iter.next();
if (item.getText().equals(label)) {
return item;
}
}
return null;
}
public void paintComponent(Graphics g) {
double scaleX = getWidth() / (double)backgroundImage.getWidth(null);
double scaleY = getHeight() / (double)backgroundImage.getHeight(null);
AffineTransform xform = AffineTransform.getScaleInstance(scaleX, scaleY);
((Graphics2D)g).drawImage(backgroundImage, xform, this);
}
public void loadVCard() {
final Runnable loadVCard = new Runnable() {
public void run() {
VCard vcard = SparkManager.getVCardManager().getVCard();
updatVCardInformation(vcard);
}
};
TaskEngine.getInstance().submit(loadVCard);
}
private void updatVCardInformation(final VCard vCard) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (vCard.getError() == null) {
String firstName = vCard.getFirstName();
String lastName = vCard.getLastName();
String nickname = vCard.getNickName();
if (ModelUtil.hasLength(firstName) && ModelUtil.hasLength(lastName)) {
setNickname(firstName + " " + lastName);
}
else if (ModelUtil.hasLength(firstName)) {
setNickname(firstName);
}
else if (ModelUtil.hasLength(nickname)) {
setNickname(nickname);
}
else {
nickname = SparkManager.getSessionManager().getUsername();
setNickname(nickname);
}
}
else {
String nickname = SparkManager.getSessionManager().getUsername();
setNickname(nickname);
return;
}
byte[] avatarBytes = null;
try {
avatarBytes = vCard.getAvatar();
}
catch (Exception e) {
Log.error("Cannot retrieve avatar bytes.", e);
}
if (avatarBytes != null) {
try {
ImageIcon avatarIcon = new ImageIcon(avatarBytes);
avatarIcon = VCardManager.scale(avatarIcon);
imageLabel.setIcon(avatarIcon);
imageLabel.setBorder(BorderFactory.createBevelBorder(0, Color.white, Color.lightGray));
imageLabel.invalidate();
imageLabel.validate();
imageLabel.repaint();
}
catch (Exception e) {
// no issue
}
}
else {
imageLabel.setIcon(null);
imageLabel.setBorder(null);
imageLabel.invalidate();
imageLabel.validate();
imageLabel.repaint();
}
}
});
}
public static Presence copyPresence(Presence presence) {
return new Presence(presence.getType(), presence.getStatus(), presence.getPriority(), presence.getMode());
}
/**
* Return the nickname Component used to display the users profile name.
*
* @return the label.
*/
public JLabel getNicknameLabel() {
return nicknameLabel;
}
private class StatusPanel extends JPanel {
private JLabel iconLabel;
private JLabel statusLabel;
public StatusPanel() {
super();
setOpaque(false);
iconLabel = new JLabel();
statusLabel = new JLabel();
setLayout(new GridBagLayout());
// Remove padding from icon label
iconLabel.setIconTextGap(0);
add(iconLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
add(statusLabel, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 2, 0, 0), 0, 0));
statusLabel.setFont(new Font("Dialog", Font.PLAIN, 11));
statusLabel.setIcon(SparkRes.getImageIcon(SparkRes.DOWN_ARROW_IMAGE));
statusLabel.setHorizontalTextPosition(JLabel.LEFT);
setOpaque(false);
final Border border = BorderFactory.createEmptyBorder(2, 2, 2, 2);
setBorder(border);
statusLabel.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
showPopup(e);
}
public void mouseEntered(MouseEvent e) {
setCursor(GraphicUtils.HAND_CURSOR);
setBorder(BorderFactory.createBevelBorder(0));
}
public void mouseExited(MouseEvent e) {
setCursor(GraphicUtils.DEFAULT_CURSOR);
setBorder(border);
}
public void mousePressed(MouseEvent e) {
setBorder(BorderFactory.createBevelBorder(1));
}
});
}
public void setStatus(String status) {
int length = status.length();
String visualStatus = status;
if (length > 30) {
visualStatus = status.substring(0, 27) + "...";
}
statusLabel.setText(visualStatus);
statusLabel.setToolTipText(status);
}
public void setIcon(Icon icon) {
iconLabel.setIcon(icon);
}
}
public void setBackgroundImage(Image image) {
this.backgroundImage = image;
}
public void setDescriptiveText(String text) {
descriptiveLabel.setText(text);
}
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
dim.width = 0;
return dim;
}
public void vcardChanged(VCard vcard) {
updatVCardInformation(vcard);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?