diff --git a/src/net/java/sip/communicator/impl/gui/main/message/ChatPanel.java b/src/net/java/sip/communicator/impl/gui/main/message/ChatPanel.java index fbf18567e..13004cb18 100644 --- a/src/net/java/sip/communicator/impl/gui/main/message/ChatPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/message/ChatPanel.java @@ -25,6 +25,7 @@ import net.java.sip.communicator.service.contactlist.MetaContact; import net.java.sip.communicator.service.protocol.OperationSetBasicInstantMessaging; import net.java.sip.communicator.service.protocol.PresenceStatus; +import net.java.sip.communicator.service.protocol.ProtocolProviderService; /** * The ChatPanel is the panel, where users can write @@ -37,8 +38,6 @@ * each ChatPanel corresponds to a ChatWindow. When * chat is in mode "group all messages in one chat window", * each ChatPanel corresponds to a tab in the ChatWindow. - * In the second case, each ChatPanel stores its tab index - * in the tabbed pane. * * @author Yana Stamcheva */ @@ -65,6 +64,8 @@ public class ChatPanel extends JPanel { private OperationSetBasicInstantMessaging imOperationSet; + private ProtocolProviderService protocolProvider; + /** * Creates a chat panel which is added to the * given chat window. @@ -73,18 +74,20 @@ public class ChatPanel extends JPanel { * chat panel. */ public ChatPanel(ChatWindow chatWindow, - OperationSetBasicInstantMessaging imOperationSet){ + ProtocolProviderService protocolProvider){ super(new BorderLayout()); this.chatWindow = chatWindow; - this.imOperationSet = imOperationSet; + this.protocolProvider = protocolProvider; + this.imOperationSet = this.chatWindow.getMainFrame() + .getProtocolIM(protocolProvider);; - conversationPanel = new ChatConversationPanel(this); + this.conversationPanel = new ChatConversationPanel(this); - sendPanel = new ChatSendPanel(this); + this.sendPanel = new ChatSendPanel(this); - writeMessagePanel = new ChatWritePanel(this); + this.writeMessagePanel = new ChatWritePanel(this); this.topSplitPane.setResizeWeight(1.0D); this.messagePane.setResizeWeight(1.0D); @@ -99,7 +102,9 @@ public ChatPanel(ChatWindow chatWindow, this.init(); - addComponentListener(new TabSelectionFocusGainListener()); + this.sendPanel.setSelectedProtocol(protocolProvider); + + addComponentListener(new TabSelectionFocusGainListener()); } /** @@ -123,12 +128,13 @@ private void init(){ * * @param contactItem The MetaContact to add. */ - public void addContactToChat ( MetaContact contactItem, - PresenceStatus status){ - + public void addContactToChat(MetaContact contactItem, + PresenceStatus status){ this.chatContacts.add(contactItem); this.chatConferencePanel.addContactToChat(contactItem, status); + + this.sendPanel.addProtocols(contactItem); } /** @@ -136,11 +142,13 @@ public void addContactToChat ( MetaContact contactItem, * * @param contactItem The MetaContact to add. */ - public void addContactToChat(MetaContact contactItem){ + public void addContactToChat(MetaContact contactItem){ this.chatContacts.add(contactItem); this.chatConferencePanel.addContactToChat(contactItem); + + this.sendPanel.addProtocols(contactItem); } /** @@ -263,7 +271,7 @@ public void componentMoved(ComponentEvent e) { } public void componentShown(ComponentEvent e) { - /*Component component = e.getComponent(); + Component component = e.getComponent(); Container parent = component.getParent(); if ( parent instanceof JTabbedPane ) { JTabbedPane tabbedPane = (JTabbedPane)parent; @@ -280,7 +288,7 @@ public void run(){ } }); } - }*/ + } } public void componentHidden(ComponentEvent e) { diff --git a/src/net/java/sip/communicator/impl/gui/main/message/ChatSendPanel.java b/src/net/java/sip/communicator/impl/gui/main/message/ChatSendPanel.java index 20d02f8c4..dee6df16d 100755 --- a/src/net/java/sip/communicator/impl/gui/main/message/ChatSendPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/message/ChatSendPanel.java @@ -4,7 +4,6 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ - package net.java.sip.communicator.impl.gui.main.message; import java.awt.BasicStroke; @@ -14,19 +13,27 @@ import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.Iterator; import javax.swing.BorderFactory; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JLabel; +import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; +import net.java.sip.communicator.impl.gui.main.customcontrols.SIPCommSelectorBox; import net.java.sip.communicator.impl.gui.main.i18n.Messages; import net.java.sip.communicator.impl.gui.utils.AntialiasingManager; import net.java.sip.communicator.impl.gui.utils.Constants; +import net.java.sip.communicator.service.contactlist.MetaContact; +import net.java.sip.communicator.service.protocol.Contact; import net.java.sip.communicator.service.protocol.Message; import net.java.sip.communicator.service.protocol.OperationSetBasicInstantMessaging; +import net.java.sip.communicator.service.protocol.ProtocolProviderService; public class ChatSendPanel extends JPanel implements ActionListener{ @@ -42,6 +49,10 @@ public class ChatSendPanel extends JPanel private ChatPanel chatPanel; + private ArrayList protocolsList = new ArrayList(); + + SIPCommSelectorBox protocolSelectorBox = new SIPCommSelectorBox(); + public ChatSendPanel(ChatPanel chatPanel) { super(new BorderLayout(5, 5)); @@ -52,11 +63,11 @@ public ChatSendPanel(ChatPanel chatPanel) { this.statusPanel.add(statusLabel); - //this.sendPanel.add(sendButton, BorderLayout.CENTER); - //this.sendPanel.add(protocolSelectorBox, BorderLayout.WEST); + this.sendPanel.add(sendButton, BorderLayout.CENTER); + this.sendPanel.add(protocolSelectorBox, BorderLayout.WEST); this.add(statusPanel, BorderLayout.CENTER); - this.add(sendButton, BorderLayout.EAST); + this.add(sendPanel, BorderLayout.EAST); this.sendButton.addActionListener(this); } @@ -108,17 +119,53 @@ public JButton getSendButton() { return sendButton; } - public void addProtocols(String[] protocolList) { - - for(int i = 0; i < protocolList.length; i ++){ - - /* protocolSelectorBox.addItem(protocolList[i], - new ImageIcon(Constants.getProtocolIcon(protocolList[i]))); - */ - } + public void addProtocols(MetaContact metaContact) { + + Iterator protocolContacts = metaContact.getContacts(); + while(protocolContacts.hasNext()){ + Contact contact = (Contact)protocolContacts.next(); + + ProtocolProviderService protocolProvider + = contact.getProtocolProvider(); + + if(!protocolsList.contains(protocolProvider)) + protocolsList.add(protocolProvider); + + String protocolName = protocolProvider.getProtocolName(); + protocolSelectorBox.addItem(protocolName, + new ImageIcon(Constants.getProtocolIcon(protocolName)), + new ProtocolItemListener()); + } } public void setTypingStatus(String statusMessage){ statusLabel.setText(statusMessage); } + + public void setSelectedProtocol(ProtocolProviderService protocolProvider){ + protocolSelectorBox.setIcon(new ImageIcon(Constants + .getProtocolIcon(protocolProvider.getProtocolName()))); + } + + private class ProtocolItemListener implements ActionListener{ + public void actionPerformed(ActionEvent e){ + JMenuItem menuItem = (JMenuItem)e.getSource(); + String itemTitle = menuItem.getText(); + + for(int i = 0; i < protocolsList.size(); i ++){ + ProtocolProviderService protocolProvider + = (ProtocolProviderService)protocolsList.get(i); + + if(protocolProvider.getProtocolName().equals(itemTitle)){ + OperationSetBasicInstantMessaging im + = chatPanel.getChatWindow().getMainFrame() + .getProtocolIM(protocolProvider); + + chatPanel.setImOperationSet(im); + + protocolSelectorBox.setSelected(menuItem); + } + } + } + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/message/ChatWindow.java b/src/net/java/sip/communicator/impl/gui/main/message/ChatWindow.java index e53a9a2c5..bfa96bbde 100755 --- a/src/net/java/sip/communicator/impl/gui/main/message/ChatWindow.java +++ b/src/net/java/sip/communicator/impl/gui/main/message/ChatWindow.java @@ -30,6 +30,7 @@ import net.java.sip.communicator.service.contactlist.MetaContact; import net.java.sip.communicator.service.protocol.OperationSetBasicInstantMessaging; import net.java.sip.communicator.service.protocol.PresenceStatus; +import net.java.sip.communicator.service.protocol.ProtocolProviderService; /** * The chat window is the place, where users @@ -119,7 +120,7 @@ public void requestFocusInCurrentChat() { * @return The ChatConversationPanel for the currently selected * chat panel. */ - public ChatConversationPanel getConversationPanel() { + public ChatConversationPanel getCurrentConversationPanel() { return this.currentChatPanel.getConversationPanel(); } @@ -194,13 +195,10 @@ public void actionPerformed(ActionEvent e) * adds it directly to the chat window. */ public void addChat(MetaContact contact, - PresenceStatus status){ + PresenceStatus status, + ProtocolProviderService protocolProvider){ - OperationSetBasicInstantMessaging contactIMOperationSet - = this.mainFrame.getProtocolIM - (contact.getDefaultContact().getProtocolProvider()); - - this.setCurrentChatPanel(new ChatPanel(this, contactIMOperationSet)); + this.setCurrentChatPanel(new ChatPanel(this, protocolProvider)); this.currentChatPanel.addContactToChat(contact, status); @@ -219,17 +217,15 @@ public void addChat(MetaContact contact, * * @param contact The MetaContact added to the chat. */ - public ChatPanel addChatTab(MetaContact contact, PresenceStatus status){ - - OperationSetBasicInstantMessaging contactIMOperationSet - = this.mainFrame.getProtocolIM - (contact.getDefaultContact().getProtocolProvider()); - + public ChatPanel addChatTab(MetaContact contact, + PresenceStatus status, + ProtocolProviderService protocolProvider){ + ChatPanel chatPanel = null; if(chatTabbedPane == null){ //Initialize the tabbed pane for the first time - chatPanel = new ChatPanel(this, contactIMOperationSet); + chatPanel = new ChatPanel(this, protocolProvider); chatPanel.addContactToChat(contact, status); @@ -258,7 +254,7 @@ public void closeOperation(MouseEvent e){ if(chatTabbedPane.getTabCount() > 0){ //The tabbed pane contains already tabs. - chatPanel = new ChatPanel(this, contactIMOperationSet); + chatPanel = new ChatPanel(this, protocolProvider); chatPanel.addContactToChat(contact, status); @@ -284,7 +280,7 @@ public void closeOperation(MouseEvent e){ (currentContactStatus)), firstChatPanel); - chatPanel = new ChatPanel(this, contactIMOperationSet); + chatPanel = new ChatPanel(this, protocolProvider); chatPanel.addContactToChat(contact, status);