package org.jivesoftware.spark.roar.displaytype; import java.awt.Dimension; import java.awt.Frame; import java.awt.Toolkit; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; import org.jivesoftware.resource.SparkRes; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.spark.SparkManager; import org.jivesoftware.spark.roar.RoarProperties; import org.jivesoftware.spark.roar.RoarResources; import org.jivesoftware.spark.roar.gui.RoarPanel; import org.jivesoftware.spark.ui.ChatFrame; import org.jivesoftware.spark.ui.ChatRoom; /** * handles Popups in the upper right corner and stacking downwards * * @author wolf.posdorfer * */ public class TopRight implements RoarDisplayType { private int _lastusedXpos; private int _lastusedYpos; private Dimension _screensize; private int _amount; private final int WIDTH = RoarPanel.WIDTH; private final int HEIGHT = RoarPanel.HEIGHT; private Action _customaction; public TopRight() { _screensize = Toolkit.getDefaultToolkit().getScreenSize(); _lastusedXpos = _screensize.width - 5; _lastusedYpos = 5; _amount = 0; _customaction = new AbstractAction() { private static final long serialVersionUID = -7237306342417462544L; @Override public void actionPerformed(ActionEvent e) { ChatFrame chatFrame = SparkManager.getChatManager() .getChatContainer().getChatFrame(); chatFrame.setState(Frame.NORMAL); chatFrame.setVisible(true); } }; } @Override public void messageReceived(ChatRoom room, Message message) { RoarProperties props = RoarProperties.getInstance(); if (props.getShowingPopups() && (_amount < props.getMaximumPopups() || props .getMaximumPopups() == 0)) { ImageIcon icon = SparkRes.getImageIcon(SparkRes.SPARK_IMAGE_32x32); String nickname = SparkManager.getUserManager().getUserNicknameFromJID(message.getFrom()); if(room.getChatType() == Message.Type.groupchat) { nickname = StringUtils.parseResource(nickname); } RoarPanel.popupWindow(this, icon, nickname, message.getBody(), _lastusedXpos, _lastusedYpos, props.getDuration(), props.getBackgroundColor(), props.getHeaderColor(), props.getTextColor(), _customaction); ++_amount; _lastusedYpos += HEIGHT + 5; if (_lastusedYpos >= _screensize.height - 90) { _lastusedXpos -= WIDTH + 5; _lastusedYpos = 5; } } } @Override public void messageSent(ChatRoom room, Message message) { // dont care } @Override public void closingRoarPanel(int x, int y) { if (_lastusedYpos > (y - 5)) { _lastusedYpos = y - 5; } if (_lastusedXpos < (x + 5)) { _lastusedXpos = x + WIDTH + 5; } --_amount; if (_amount == 0) { _lastusedXpos = _screensize.width - 5; _lastusedYpos = 5; } } @Override public String toString() { return "TopRight"; } public static String getName() { return "TopRight"; } public static String getLocalizedName() { return RoarResources.getString("roar.display.topright"); } }