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.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 lower right corner and stacking upwards * * @author wolf.posdorfer * */ public class BottomRight implements RoarDisplayType { private int _lastusedXpos; private int _lastusedYpos; private Dimension _screensize; private int _defaultx; private int _defaulty; private int _amount; private final int WIDTH = RoarPanel.WIDTH; private final int HEIGHT = RoarPanel.HEIGHT; private AbstractAction _customaction; private static final int TASKBAR = 35; public BottomRight() { _screensize = Toolkit.getDefaultToolkit().getScreenSize(); _lastusedXpos = _screensize.width - 5; _lastusedYpos = _screensize.height - HEIGHT - TASKBAR; _defaultx = _lastusedXpos; _defaulty = _lastusedYpos; _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 <= HEIGHT + 5) { _lastusedXpos -= WIDTH + 5; _lastusedYpos = _defaulty; } } } @Override public void messageSent(ChatRoom room, Message message) { // dont care } @Override public void closingRoarPanel(int x, int y) { if (_lastusedYpos < (y + 5 + TASKBAR)) { _lastusedYpos = y - 5; } if (_lastusedXpos < (x + 5)) { _lastusedXpos = x + WIDTH + 5; } if (_lastusedYpos > _defaulty) { _lastusedYpos = _defaulty; } --_amount; if (_amount <= 0) { _amount = 0; _lastusedXpos = _defaultx; _lastusedYpos = _defaulty; } } @Override public String toString() { return "BottomRight"; } public static String getName() { return "BottomRight"; } public static String getLocalizedName() { return RoarResources.getString("roar.display.bottomright"); } }