diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java index 9386311ee..15fa40b36 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java @@ -17,6 +17,8 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.Iterator; import javax.swing.BorderFactory; @@ -25,7 +27,9 @@ import javax.swing.JList; import javax.swing.JPanel; import javax.swing.ListCellRenderer; +import javax.swing.SwingUtilities; +import net.java.sip.communicator.impl.gui.main.contactlist.ContactListPanel.RunMessageWindow; import net.java.sip.communicator.impl.gui.main.customcontrols.SIPCommButton; import net.java.sip.communicator.impl.gui.utils.AntialiasingManager; import net.java.sip.communicator.impl.gui.utils.Constants; @@ -58,8 +62,10 @@ public ContactListCellRenderer() { super(new BorderLayout()); this.setBackground(Color.WHITE); - this.buttonsPanel.setOpaque(false); + this.buttonsPanel.setOpaque(false); + this.buttonsPanel.setName("buttonsPanel"); + this.setOpaque(true); this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); @@ -102,26 +108,36 @@ public Component getListCellRendererComponent( //this.buttonsPanel.add(extendPanelButton); Iterator i = contactItem.getContacts(); + int buttonsPanelWidth = 0; while(i.hasNext()){ Contact protocolContact = (Contact)i.next(); String protocolName = protocolContact.getProtocolProvider().getProtocolName(); - Image protocolStatusIcon = (Image)Constants.getProtocolStatusIcons - (protocolName).get(protocolContact.getPresenceStatus()); + Image protocolStatusIcon + = (Image)Constants.getProtocolStatusIcons + (protocolName).get(protocolContact.getPresenceStatus()); + + ContactProtocolButton contactProtocolButton + = new ContactProtocolButton(protocolStatusIcon, + protocolStatusIcon); + + contactProtocolButton.setProtocolProvider + (protocolContact.getProtocolProvider()); + + contactProtocolButton.setSize(protocolStatusIcon.getWidth(null), + protocolStatusIcon.getHeight(null)); - SIPCommButton contactProtocolButton = new SIPCommButton(protocolStatusIcon, - protocolStatusIcon); this.buttonsPanel.add(contactProtocolButton); + buttonsPanelWidth += contactProtocolButton.getWidth(); //toolTipText - //+= ""; + //+= ""; } - this.add(buttonsPanel, BorderLayout.EAST); toolTipText += ""; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPanel.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPanel.java index 05160086c..ffc46326c 100755 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPanel.java @@ -43,6 +43,7 @@ import net.java.sip.communicator.service.contactlist.MetaContact; import net.java.sip.communicator.service.contactlist.MetaContactGroup; import net.java.sip.communicator.service.contactlist.MetaContactListService; +import net.java.sip.communicator.service.protocol.Contact; import net.java.sip.communicator.service.protocol.Message; import net.java.sip.communicator.service.protocol.OperationSetTypingNotifications; import net.java.sip.communicator.service.protocol.PresenceStatus; @@ -212,12 +213,29 @@ public void mousePressed(MouseEvent e) { popupMenu.setVisible(true); } - } else if (component instanceof JButton) { + } else if (component instanceof JButton) { //Click on the info button opens the info popup panel SwingUtilities.invokeLater (new RunInfoWindow(selectedCellPoint, contact)); - } + } else if (component instanceof JPanel + && component.getName().equals("buttonsPanel")){ + JPanel panel = (JPanel)component; + + int internalX = translatedX - (renderer.getWidth() - panel.getWidth() - 2); + int internalY = translatedY - (renderer.getHeight() - panel.getHeight()); + + Component c = panel.getComponentAt(4, 4); + + if(c instanceof ContactProtocolButton){ + + SwingUtilities.invokeLater + (new RunMessageWindow(contact, + ((ContactProtocolButton)c) + .getProtocolProvider())); + } + } + } } @@ -233,16 +251,25 @@ public void mouseReleased(MouseEvent e) { public class RunMessageWindow implements Runnable { private MetaContact contactItem; + private ProtocolProviderService protocolProvider; public RunMessageWindow(MetaContact contactItem) { this.contactItem = contactItem; + this.protocolProvider + = contactItem.getDefaultContact().getProtocolProvider(); } + + public RunMessageWindow(MetaContact contactItem, + ProtocolProviderService protocolProvider){ + this.contactItem = contactItem; + this.protocolProvider = protocolProvider; + } public void run() { PresenceStatus contactStatus = ((ContactListModel)contactList.getModel()) .getMetaContactStatus(this.contactItem); - + if(!Constants.TABBED_CHAT_WINDOW){ //If in mode "open all messages in new window" if (contactMsgWindows.containsKey(this.contactItem)) { @@ -266,7 +293,8 @@ public void run() { contactMsgWindows.put(this.contactItem, msgWindow); - msgWindow.addChat(this.contactItem, contactStatus); + msgWindow.addChat(this.contactItem, + contactStatus, protocolProvider); msgWindow.pack(); @@ -299,7 +327,7 @@ public void windowClosing(WindowEvent e) { // If there's no open tab for the given contact. ChatPanel chatPanel = tabbedChatWindow.addChatTab(this.contactItem, - contactStatus); + contactStatus, protocolProvider); tabbedChatWindow.setCurrentChatPanel(chatPanel); @@ -378,10 +406,14 @@ public void messageReceived(MessageReceivedEvent evt) { MetaContact metaContact = mainFrame.getContactList() .findMetaContactByContact(evt.getSourceContact()); + PresenceStatus contactStatus = ((ContactListModel)this.contactList.getModel()) .getMetaContactStatus(metaContact); - + + ProtocolProviderService protocolProvider + = evt.getSourceContact().getProtocolProvider(); + if(!Constants.TABBED_CHAT_WINDOW){ //If in mode "open all messages in new window" if (contactMsgWindows.containsKey(metaContact)) { @@ -408,7 +440,8 @@ public void messageReceived(MessageReceivedEvent evt) { contactMsgWindows.put(metaContact, msgWindow); - msgWindow.addChat(metaContact, contactStatus); + msgWindow.addChat(metaContact, contactStatus, + protocolProvider); msgWindow.getCurrentChatPanel().getConversationPanel() .processMessage(evt.getSourceContact().getDisplayName(), @@ -445,7 +478,8 @@ public void windowClosing(WindowEvent e) { == null){ // If there's no open tab for the given contact. chatPanel - = tabbedChatWindow.addChatTab(metaContact, contactStatus); + = tabbedChatWindow.addChatTab(metaContact, contactStatus, + protocolProvider); chatPanel.getConversationPanel() .processMessage(evt.getSourceContact().getDisplayName(), diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactProtocolButton.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactProtocolButton.java new file mode 100644 index 000000000..da62e3f31 --- /dev/null +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactProtocolButton.java @@ -0,0 +1,23 @@ +package net.java.sip.communicator.impl.gui.main.contactlist; + +import java.awt.Image; + +import net.java.sip.communicator.impl.gui.main.customcontrols.SIPCommButton; +import net.java.sip.communicator.service.protocol.ProtocolProviderService; + +public class ContactProtocolButton extends SIPCommButton { + + private ProtocolProviderService protocolProvider; + + public ContactProtocolButton(Image bgImage, Image rolloverImage){ + super(bgImage, rolloverImage); + } + + public ProtocolProviderService getProtocolProvider() { + return protocolProvider; + } + + public void setProtocolProvider(ProtocolProviderService protocolProvider) { + this.protocolProvider = protocolProvider; + } +}