diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatPanel.java index 6a39e99ff..dc4ff17c9 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatPanel.java @@ -310,7 +310,7 @@ public Window getConversationContainerWindow() { */ public void setStatusMessage(String statusMessage) { - this.sendPanel.setStatusMessage(statusMessage); + this.sendPanel.getStatusPanel().setStatusMessage(statusMessage); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatSendPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatSendPanel.java index 1c6bf4b69..42d4687bc 100755 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatSendPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatSendPanel.java @@ -12,8 +12,6 @@ import javax.swing.*; import net.java.sip.communicator.impl.gui.*; -import net.java.sip.communicator.impl.gui.lookandfeel.*; -import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.swing.*; /** @@ -34,8 +32,6 @@ public class ChatSendPanel private final TransparentPanel sendPanel = new TransparentPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0)); - private final JLabel statusLabel = new JLabel(); - private final ChatPanel chatPanel; /** @@ -54,8 +50,6 @@ public ChatSendPanel(ChatPanel chatPanel) this.chatPanel = chatPanel; - this.statusPanel.add(statusLabel, BorderLayout.WEST); - this.sendPanel.add(sendButton); this.add(statusPanel, BorderLayout.CENTER); @@ -85,58 +79,6 @@ public void run() } } - /** - * Sets the message text to the status panel in the bottom of the chat - * window. Used to show typing notification messages, links' hrefs, etc. - * - * @param statusMessage The message text to be displayed. - */ - public void setStatusMessage(String statusMessage) - { - int stringWidth = GuiUtils.getStringWidth(statusLabel, statusMessage); - - final int dot3 = GuiUtils.getStringWidth(statusLabel, "... "); - - // first, we avoid to loop if it is useless. - final int statusPanelWidth = statusPanel.getWidth(); - if (dot3 >= statusPanelWidth) - { - if (stringWidth > dot3) - statusMessage = "..."; - } - else - { - while ((stringWidth > (statusPanelWidth - dot3)) - && !statusMessage.equals("...")) - { - if (statusMessage.endsWith("...")) - { - statusMessage = statusMessage.substring(0, - statusMessage.indexOf("...") - 1).concat("..."); - } - else - { - statusMessage = statusMessage.substring(0, - statusMessage.length() - 3).concat("..."); - } - stringWidth = GuiUtils.getStringWidth(statusLabel, statusMessage); - } - } - statusLabel.setText(statusMessage); - } - - private class StatusPanel extends TransparentPanel - { - public StatusPanel() - { - super(new BorderLayout()); - - this.setBorder(BorderFactory.createCompoundBorder( - SIPCommBorders.getRoundBorder(), - BorderFactory.createEmptyBorder(3, 3, 3, 3))); - } - } - /** * Returns the parent ChatPanel. * @return the parent ChatPanel @@ -160,7 +102,7 @@ public JPanel getSendPanel() * Returns the status panel contained in this panel. * @return the status panel contained in this panel */ - public JPanel getStatusPanel() + public StatusPanel getStatusPanel() { return statusPanel; } diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/StatusPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/StatusPanel.java new file mode 100644 index 000000000..9ffd7db1c --- /dev/null +++ b/src/net/java/sip/communicator/impl/gui/main/chat/StatusPanel.java @@ -0,0 +1,94 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.gui.main.chat; + +import java.awt.*; + +import javax.swing.*; + +import net.java.sip.communicator.impl.gui.lookandfeel.*; +import net.java.sip.communicator.util.*; +import net.java.sip.communicator.util.swing.*; + +/** + * The StatusPanel is the panel shown on the bottom of the chat + * window and containing the typing notification messages. + * + * @author Yana Stamcheva + */ +public class StatusPanel extends TransparentPanel +{ + private final JLabel statusLabel = new JLabel(); + + public StatusPanel() + { + super(new BorderLayout()); + + this.setPreferredSize(new Dimension(100, getFontHeight() + 10)); + + this.setBorder(BorderFactory.createCompoundBorder( + SIPCommBorders.getRoundBorder(), + BorderFactory.createEmptyBorder(3, 3, 3, 3))); + + this.add(statusLabel, BorderLayout.WEST); + } + + /** + * Sets the message text to the status panel in the bottom of the chat + * window. Used to show typing notification messages, links' hrefs, etc. + * + * @param statusMessage The message text to be displayed. + */ + public void setStatusMessage(String statusMessage) + { + int stringWidth = GuiUtils.getStringWidth(statusLabel, statusMessage); + + final int dot3 = GuiUtils.getStringWidth(statusLabel, "... "); + + // first, we avoid to loop if it is useless. + final int statusPanelWidth = this.getWidth(); + if (dot3 >= statusPanelWidth) + { + if (stringWidth > dot3) + statusMessage = "..."; + } + else + { + while ((stringWidth > (statusPanelWidth - dot3)) + && !statusMessage.equals("...")) + { + if (statusMessage.endsWith("...")) + { + statusMessage = statusMessage.substring(0, + statusMessage.indexOf("...") - 1).concat("..."); + } + else + { + statusMessage = statusMessage.substring(0, + statusMessage.length() - 3).concat("..."); + } + stringWidth + = GuiUtils.getStringWidth(statusLabel, statusMessage); + } + } + statusLabel.setText(statusMessage); + } + + /** + * Returns the height of the default status label font. + * + * @return the height of the default status label font. + */ + private int getFontHeight() + { + FontMetrics statusLabelFontMetrics + = statusLabel.getFontMetrics(statusLabel.getFont()); + + return statusLabelFontMetrics.getMaxAscent() + + statusLabelFontMetrics.getMaxDescent(); + } +}