diff options
Diffstat (limited to 'src/net/java/sip/communicator/impl/gui/main')
54 files changed, 669 insertions, 1005 deletions
diff --git a/src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java b/src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java index 0d107e7..1d3919f 100644 --- a/src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java +++ b/src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java @@ -24,7 +24,7 @@ import net.java.sip.communicator.util.swing.*; * @author Yana Stamcheva */ public class AccountRegSummaryPage - extends SCScrollPane + extends SIPCommScrollPane implements WizardPage { private final Logger logger = Logger.getLogger(AccountRegSummaryPage.class); diff --git a/src/net/java/sip/communicator/impl/gui/main/call/CallTransferHandler.java b/src/net/java/sip/communicator/impl/gui/main/call/CallTransferHandler.java index df54503..5f3f0cd 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/CallTransferHandler.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/CallTransferHandler.java @@ -15,6 +15,7 @@ import javax.swing.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.swing.*; diff --git a/src/net/java/sip/communicator/impl/gui/main/call/ChooseCallAccountPopupMenu.java b/src/net/java/sip/communicator/impl/gui/main/call/ChooseCallAccountPopupMenu.java index a2ade87..d5019eb 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/ChooseCallAccountPopupMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/ChooseCallAccountPopupMenu.java @@ -147,8 +147,9 @@ public class ChooseCallAccountPopupMenu for (Object o : telephonyObjects) { - if (o instanceof UIContactDetail) - this.addTelephonyContactItem((UIContactDetail) o, opSetClass); + if (o instanceof UIContactDetailImpl) + this.addTelephonyContactItem( + (UIContactDetailImpl) o, opSetClass); else if (o instanceof ChatTransport) this.addTelephonyChatTransportItem((ChatTransport) o, opSetClass); @@ -225,7 +226,7 @@ public class ChooseCallAccountPopupMenu * would be performed when an item is selected */ private void addTelephonyContactItem( - final UIContactDetail telephonyContact, + final UIContactDetailImpl telephonyContact, final Class<? extends OperationSet> opSetClass) { final ContactMenuItem contactItem @@ -473,9 +474,9 @@ public class ChooseCallAccountPopupMenu */ private static final long serialVersionUID = 0L; - private final UIContactDetail contact; + private final UIContactDetailImpl contact; - public ContactMenuItem(UIContactDetail contact) + public ContactMenuItem(UIContactDetailImpl contact) { this.contact = contact; diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java index 0add775..7242a22 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java @@ -15,7 +15,6 @@ import javax.swing.*; import javax.swing.text.*; import net.java.sip.communicator.impl.gui.*; -import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; @@ -503,7 +502,7 @@ public class OneToOneCallPeerPanel { if (image == null || image.length <= 0) { - TreeContactList.setSourceContactImage( + GuiActivator.getContactList().setSourceContactImage( peerName, photoLabel, 100, 100); } else diff --git a/src/net/java/sip/communicator/impl/gui/main/call/ReceivedCallDialog.java b/src/net/java/sip/communicator/impl/gui/main/call/ReceivedCallDialog.java index e97c2f5..81807bc 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/ReceivedCallDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/ReceivedCallDialog.java @@ -129,7 +129,7 @@ public class ReceivedCallDialog { public void run() { - TreeContactList + GuiActivator.getContactList() .setSourceContactImage( peer.getAddress(), callLabel[0], 50, 50); diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java index ff6859a..fba0eee 100755 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java @@ -47,7 +47,7 @@ import net.java.sip.communicator.util.swing.SwingWorker; * @author Adam Netocny */ public class ChatConversationPanel - extends SCScrollPane + extends SIPCommScrollPane implements HyperlinkListener, MouseListener, ClipboardOwner, diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatTransferHandler.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatTransferHandler.java index b49a2c4..5e36b20 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatTransferHandler.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatTransferHandler.java @@ -19,6 +19,7 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; import net.java.sip.communicator.service.contactlist.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.swing.*; diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java index 855dd77..7cdb61f 100755 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java @@ -71,7 +71,7 @@ public class ChatWritePanel private final ArrayList<ChatMenuListener> menuListeners = new ArrayList<ChatMenuListener>(); - private final SCScrollPane scrollPane = new SCScrollPane(); + private final SIPCommScrollPane scrollPane = new SIPCommScrollPane(); private ChatTransportSelectorBox transportSelectorBox; diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ContactPhotoPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ContactPhotoPanel.java index 54c8ac6..1f5f1da 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ContactPhotoPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ContactPhotoPanel.java @@ -17,6 +17,7 @@ import net.java.sip.communicator.impl.gui.main.chat.conference.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.util.*; +import net.java.sip.communicator.util.swing.*; /** * The photo label corresponding to the current chat. diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomMemberListPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomMemberListPanel.java index 25364e9..d3ef1b3 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomMemberListPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomMemberListPanel.java @@ -11,11 +11,11 @@ import java.awt.event.*; import javax.swing.*; -import net.java.sip.communicator.impl.gui.customcontrols.*; import net.java.sip.communicator.impl.gui.main.chat.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.skin.*; +import net.java.sip.communicator.util.swing.*; /** * The <tt>ChatContactListPanel</tt> is the panel added on the right of the @@ -99,7 +99,7 @@ public class ChatRoomMemberListPanel } - JScrollPane contactsScrollPane = new SCScrollPane(); + JScrollPane contactsScrollPane = new SIPCommScrollPane(); contactsScrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); contactsScrollPane.setOpaque(false); diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/history/DatesPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/history/DatesPanel.java index 45d71f2..1f1595e 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/history/DatesPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/history/DatesPanel.java @@ -23,7 +23,7 @@ import net.java.sip.communicator.util.swing.*; * @author Lubomir Marinov */ public class DatesPanel - extends SCScrollPane + extends SIPCommScrollPane implements ListSelectionListener { private final JList datesList = new JList(); diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/toolBars/MainToolBar.java b/src/net/java/sip/communicator/impl/gui/main/chat/toolBars/MainToolBar.java index a2fa7f2..14faa61 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/toolBars/MainToolBar.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/toolBars/MainToolBar.java @@ -605,7 +605,7 @@ public class MainToolBar } UIContactDetail cd = - new UIContactDetail( + new UIContactDetailImpl( pnd.getNumber(), pnd.getNumber() + " (" + localizedType + ")", diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListUI.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListUI.java index 4ca0420..c9f4a9f 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListUI.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListUI.java @@ -12,9 +12,9 @@ import java.awt.event.*; import javax.swing.*; import net.java.sip.communicator.impl.gui.*; -import net.java.sip.communicator.impl.gui.customcontrols.*; import net.java.sip.communicator.impl.gui.main.chat.*; import net.java.sip.communicator.impl.gui.main.chat.conference.*; +import net.java.sip.communicator.util.swing.*; /** * The <tt>ChatRoomsListPanel</tt> is the panel that contains the @@ -24,7 +24,7 @@ import net.java.sip.communicator.impl.gui.main.chat.conference.*; * @author Lubomir Marinov */ public class ChatRoomListUI - extends SCScrollPane + extends SIPCommScrollPane implements MouseListener, ChatRoomListChangeListener, AdHocChatRoomListChangeListener diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java index 55f30df..fba6560 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java @@ -30,7 +30,7 @@ import net.java.sip.communicator.util.swing.*; * @author Lyubomir Marinov */ public class ChatRoomTableUI - extends SCScrollPane + extends SIPCommScrollPane implements MouseListener { /** diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/CallHistoryFilter.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/CallHistoryFilter.java index 8ccf6aa..b688c21 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/CallHistoryFilter.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/CallHistoryFilter.java @@ -9,9 +9,9 @@ package net.java.sip.communicator.impl.gui.main.contactlist; import java.util.*; import net.java.sip.communicator.impl.gui.*; -import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; import net.java.sip.communicator.impl.gui.main.contactlist.notifsource.*; import net.java.sip.communicator.service.contactsource.*; +import net.java.sip.communicator.service.gui.*; /** * The <tt>CallHistoryFilter</tt> is a filter over the history contact sources. @@ -36,11 +36,11 @@ public class CallHistoryFilter if (notificationSource != null) addMatching(notificationSource); - Collection<ExternalContactSource> contactSources - = TreeContactList.getContactSources(); + Collection<UIContactSource> contactSources + = GuiActivator.getContactList().getContactSources(); // Then add Call history contact source. - for (ExternalContactSource contactSource : contactSources) + for (UIContactSource contactSource : contactSources) { ContactSourceService sourceService = contactSource.getContactSourceService(); @@ -54,8 +54,8 @@ public class CallHistoryFilter filterQuery.addContactQuery(query); // Add first available results. - this.addMatching( query.getQueryResults(), - contactSource); + addMatching(query.getQueryResults(), + contactSource); // We know that this query should be finished here and we do not // expect any further results from it. @@ -109,7 +109,7 @@ public class CallHistoryFilter * we're adding */ private void addMatching( List<SourceContact> sourceContacts, - ExternalContactSource uiSource) + UIContactSource uiSource) { Iterator<SourceContact> contactsIter = sourceContacts.iterator(); diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ChooseUIContactDetailPopupMenu.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ChooseUIContactDetailPopupMenu.java index c1bbcd5..0568aa6 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ChooseUIContactDetailPopupMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ChooseUIContactDetailPopupMenu.java @@ -16,6 +16,7 @@ import javax.swing.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.utils.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.skin.*; import net.java.sip.communicator.util.swing.*; @@ -61,7 +62,8 @@ public class ChooseUIContactDetailPopupMenu for (UIContactDetail detail : contactDetails) { - this.addContactDetailItem(detail, action); + if (detail instanceof UIContactDetailImpl) + this.addContactDetailItem((UIContactDetailImpl) detail, action); } } @@ -91,7 +93,7 @@ public class ChooseUIContactDetailPopupMenu * would be performed when an item is selected */ private void addContactDetailItem( - final UIContactDetail contactDetail, + final UIContactDetailImpl contactDetail, final UIContactDetailAction contactDetailAction) { final ContactMenuItem contactItem @@ -168,9 +170,9 @@ public class ChooseUIContactDetailPopupMenu */ private static final long serialVersionUID = 0L; - private final UIContactDetail contact; + private final UIContactDetailImpl contact; - public ContactMenuItem(UIContactDetail contact) + public ContactMenuItem(UIContactDetailImpl contact) { this.contact = contact; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListEvent.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListEvent.java deleted file mode 100644 index 8a8a9af..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListEvent.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -import java.util.*; - -/** - * The <tt>ContactListEvent</tt> is triggered when a contact or a group is - * clicked in the contact list. - * @author Yana Stamcheva - */ -public class ContactListEvent - extends EventObject -{ - private int eventID = -1; - - /** - * Indicates that the ContactListEvent instance was triggered by - * selecting a contact in the contact list. - */ - public static final int CONTACT_CLICKED = 1; - - /** - * Indicates that the ContactListEvent instance was triggered by selecting - * a group in the contact list. - */ - public static final int GROUP_CLICKED = 2; - - /** - * Indicated the number of click accompanying the event - */ - private int clickCount; - - /** - * Creates a new ContactListEvent according to the specified parameters. - * @param source the MetaContact which was selected - * @param eventID one of the XXX_SELECTED static fields indicating the - * nature of the event. - * @param clickCount the number of clicks that was produced when clicking - * over the contact list - */ - public ContactListEvent(Object source, int eventID, int clickCount) - { - super(source); - - this.eventID = eventID; - this.clickCount = clickCount; - } - - /** - * Returns an event id specifying whether the type of this event - * (CONTACT_SELECTED or PROTOCOL_CONTACT_SELECTED) - * @return one of the XXX_SELECTED int fields of this class. - */ - public int getEventID() - { - return eventID; - } - - /** - * Returns the <tt>UIContactDescriptor</tt> for which this event occured. - * @return the </tt>UIContactDescriptor</tt> for which this event occured - */ - public UIContact getSourceContact() - { - if(getSource() instanceof UIContact) - return (UIContact) getSource(); - - return null; - } - - /** - * Returns the <tt>UIGroupDescriptor</tt> for which this event occured. - * @return the <tt>UIGroupDescriptor</tt> for which this event occured - */ - public UIGroup getSourceGroup() - { - if(getSource() instanceof UIGroup) - return (UIGroup) getSource(); - - return null; - } - - /** - * Returns the number of click of this event. - * @return the number of click of this event. - */ - public int getClickCount() - { - return clickCount; - } -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListFilter.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListFilter.java deleted file mode 100644 index 901be8f..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListFilter.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -/** - * The <tt>ContactListFilter</tt> is an interface meant to be implemented by - * modules interested in filtering the contact list. An implementation of this - * interface should be able to answer if an <tt>UIContact</tt> or an - * <tt>UIGroup</tt> is matching the corresponding filter. - * - * @author Yana Stamcheva - */ -public interface ContactListFilter -{ - /** - * Indicates if the given <tt>uiGroup</tt> is matching the current filter. - * @param uiContact the <tt>UIContact</tt> to check - * @return <tt>true</tt> to indicate that the given <tt>uiContact</tt> - * matches this filter, <tt>false</tt> - otherwise - */ - public boolean isMatching(UIContact uiContact); - - /** - * Indicates if the given <tt>uiGroup</tt> is matching the current filter. - * @param uiGroup the <tt>UIGroup</tt> to check - * @return <tt>true</tt> to indicate that the given <tt>uiGroup</tt> - * matches this filter, <tt>false</tt> - otherwise - */ - public boolean isMatching(UIGroup uiGroup); - - /** - * Applies this filter to any interested sources - * @param filterQuery the <tt>FilterQuery</tt> that tracks the results of - * this filtering - */ - public void applyFilter(FilterQuery filterQuery); -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListListener.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListListener.java deleted file mode 100644 index e6f31e0..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListListener.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -import java.util.*; - -/** - * Listens for events coming from mouse events over the contact list. For - * example a contact been clicked or a group been selected. - * - * @author Yana Stamcheva - */ -public interface ContactListListener extends EventListener -{ - /** - * Indicates that a group has been selected. - * @param evt the <tt>ContactListEvent</tt> that has been triggered from - * the user selection - */ - public void groupClicked(ContactListEvent evt); - - /** - * Indicates that a contact has been clicked. - * @param evt the <tt>ContactListEvent</tt> that has been triggered from - * the user click - */ - public void contactClicked(ContactListEvent evt); -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListNode.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListNode.java deleted file mode 100644 index eb12943..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListNode.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -/** - * The <tt>ContactListNode</tt> represents a node in the contact list data - * model. An implementation of this interface should be able to determine the - * index of this node in its contact source. - * - * @author Yana Stamcheva - */ -public interface ContactListNode -{ - /** - * Returns the index of this node in the <tt>MetaContactListService</tt>. - * @return the index of this node in the <tt>MetaContactListService</tt> - */ - public int getSourceIndex(); -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java index 9243cb9..1707f6b 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java @@ -14,7 +14,6 @@ import javax.swing.*; import javax.swing.Timer; import net.java.sip.communicator.impl.gui.*; -import net.java.sip.communicator.impl.gui.customcontrols.*; import net.java.sip.communicator.impl.gui.event.*; import net.java.sip.communicator.impl.gui.main.*; import net.java.sip.communicator.impl.gui.main.chat.*; @@ -22,6 +21,7 @@ import net.java.sip.communicator.service.contacteventhandler.*; import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.gui.Container; +import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.util.*; @@ -37,7 +37,7 @@ import org.osgi.framework.*; * @author Yana Stamcheva */ public class ContactListPane - extends SCScrollPane + extends SIPCommScrollPane implements MessageListener, TypingNotificationsListener, FileTransferListener, @@ -212,8 +212,17 @@ public class ContactListPane * Implements the ContactListListener.groupSelected method. * @param evt the <tt>ContactListEvent</tt> that notified us */ - public void groupClicked(ContactListEvent evt) - {} + public void groupClicked(ContactListEvent evt) {} + + /** + * We're not interested in group selection events here. + */ + public void groupSelected(ContactListEvent evt) {} + + /** + * We're not interested in contact selection events here. + */ + public void contactSelected(ContactListEvent evt) {} /** * When a message is received determines whether to open a new chat window diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSourceFilter.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSourceFilter.java index 0f71721..aecad64 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSourceFilter.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSourceFilter.java @@ -10,6 +10,7 @@ import java.util.*; import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; import net.java.sip.communicator.service.contactsource.*; +import net.java.sip.communicator.service.gui.*; /** * The <tt>ContactListSourceFilter</tt> is a <tt>ContactListFilter</tt> that @@ -17,7 +18,8 @@ import net.java.sip.communicator.service.contactsource.*; * * @author Yana Stamcheva */ -public interface ContactListSourceFilter extends ContactListFilter +public interface ContactListSourceFilter + extends ContactListFilter { /** * Applies this filter to the given <tt>contactSource</tt>. diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java index e763466..21c4859 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java @@ -17,6 +17,7 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.chat.*; import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; import net.java.sip.communicator.service.contactlist.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.swing.*; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java index c6b6fe2..951cc1c 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java @@ -22,6 +22,7 @@ import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.contactsource.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.ServerStoredDetails.FaxDetail; import net.java.sip.communicator.service.protocol.ServerStoredDetails.GenericDetail; @@ -182,7 +183,7 @@ public class ContactListTreeCellRenderer /** * The icon showing the contact status. */ - protected ImageIcon statusIcon = new ImageIcon(); + protected Icon statusIcon = new ImageIcon(); /** * Indicates if the current list cell is selected. @@ -372,7 +373,7 @@ public class ContactListTreeCellRenderer // Make appropriate adjustments for contact nodes and group nodes. if (value instanceof ContactNode) { - UIContact contact + UIContactImpl contact = ((ContactNode) value).getContactDescriptor(); String displayName = contact.getDisplayName(); @@ -387,10 +388,13 @@ public class ContactListTreeCellRenderer this.nameLabel.setText(displayName); - if(statusIcon != null && contactList.isContactActive(contact)) - statusIcon.setImage(msgReceivedImage); + if(statusIcon != null + && contactList.isContactActive(contact) + && statusIcon instanceof ImageIcon) + ((ImageIcon) statusIcon).setImage(msgReceivedImage); else statusIcon = contact.getStatusIcon(); + this.statusLabel.setIcon(statusIcon); this.nameLabel.setFont(this.getFont().deriveFont(Font.PLAIN)); @@ -400,7 +404,7 @@ public class ContactListTreeCellRenderer // Initializes status message components if the given meta contact // contains a status message. - this.initDisplayDetails(contact); + this.initDisplayDetails(contact.getDisplayDetails()); this.initButtonsPanel(contact); @@ -417,7 +421,7 @@ public class ContactListTreeCellRenderer avatarHeight = AVATAR_HEIGHT; } - ImageIcon avatar + Icon avatar = contact.getAvatar(isSelected, avatarWidth, avatarHeight); if (avatar != null) @@ -441,7 +445,7 @@ public class ContactListTreeCellRenderer } else if (value instanceof GroupNode) { - UIGroup groupItem + UIGroupImpl groupItem = ((GroupNode) value).getGroupDescriptor(); this.nameLabel.setText(groupItem.getDisplayName()); @@ -485,6 +489,7 @@ public class ContactListTreeCellRenderer + "/" + groupItem.countChildContacts()); } + this.initDisplayDetails(groupItem.getDisplayDetails()); this.setToolTipText(groupItem.getDescriptor().toString()); } @@ -579,21 +584,36 @@ public class ContactListTreeCellRenderer public Dimension getPreferredSize() { Dimension preferredSize = new Dimension(); + int preferredHeight; if (treeNode instanceof ContactNode) { UIContact contact = ((ContactNode) treeNode).getContactDescriptor(); - if (contact instanceof ShowMoreContact) + preferredHeight = contact.getPreferredHeight(); + + if (preferredHeight > 0) + preferredSize.height = preferredHeight; + else if (contact instanceof ShowMoreContact) preferredSize.height = 18; else if (isSelected) preferredSize.height = 70; else preferredSize.height = 30; } - else - preferredSize.height = 18; + else if (treeNode instanceof GroupNode) + { + UIGroup group + = ((GroupNode) treeNode).getGroupDescriptor(); + + preferredHeight = group.getPreferredHeight(); + + if (preferredHeight > 0) + preferredSize.height = preferredHeight; + else + preferredSize.height = 18; + } return preferredSize; } @@ -646,16 +666,13 @@ public class ContactListTreeCellRenderer /** * Initializes the display details component for the given * <tt>UIContact</tt>. - * @param contact the <tt>UIContact</tt>, for which we initialize the - * details component + * @param details the display details to show */ - private void initDisplayDetails(UIContact contact) + private void initDisplayDetails(String displayDetails) { remove(displayDetailsLabel); displayDetailsLabel.setText(""); - String displayDetails = contact.getDisplayDetails(); - if (displayDetails != null && displayDetails.length() > 0) { // Replace all occurrences of new line with slash. @@ -829,6 +846,7 @@ public class ContactListTreeCellRenderer this.add(callButton, constraints); callButton.setBounds(x, y, 28, 28); + callButton.setEnabled(telephonyContact != null || hasPhone); x += callButton.getWidth(); @@ -1415,7 +1433,7 @@ public class ContactListTreeCellRenderer phones.add(pnd.getNumber()); UIContactDetail cd = - new UIContactDetail( + new UIContactDetailImpl( pnd.getNumber(), pnd.getNumber() + " (" + localizedType + ")", diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeModel.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeModel.java index 579464c..41d6390 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeModel.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeModel.java @@ -11,6 +11,8 @@ import java.lang.reflect.*; import javax.swing.*; import javax.swing.tree.*; +import net.java.sip.communicator.service.gui.*; + /** * The data model of the contact list. * @@ -40,7 +42,7 @@ public class ContactListTreeModel this.parentTree = tree; - RootUIGroup rootDescriptor = new RootUIGroup(); + UIGroupImpl rootDescriptor = new RootUIGroup(); rootGroupNode = new GroupNode(this, rootDescriptor); rootDescriptor.setGroupNode(rootGroupNode); @@ -157,7 +159,7 @@ public class ContactListTreeModel * The <tt>RootUIGroup</tt> is the root group in this contact list model. */ private static class RootUIGroup - implements UIGroup + extends UIGroupImpl { /** * The corresponding group node. diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactNode.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactNode.java index 7fc66d4..c756518 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactNode.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactNode.java @@ -8,6 +8,8 @@ package net.java.sip.communicator.impl.gui.main.contactlist; import javax.swing.tree.*; +import net.java.sip.communicator.service.gui.*; + /** * The <tt>ContactNode</tt> is a <tt>ContactListNode</tt> corresponding to a * given <tt>UIContact</tt>. @@ -31,21 +33,22 @@ public class ContactNode /** * Creates a <tt>ContactNode</tt> by specifying the corresponding * <tt>contact</tt>. - * @param contact the <tt>UIContact</tt> corresponding to this node + * @param contact the <tt>UIContactImpl</tt> corresponding to this node */ - public ContactNode(UIContact contact) + public ContactNode(UIContactImpl contact) { super(contact); this.contact = contact; } /** - * Returns the corresponding <tt>UIContact</tt>. - * @return the corresponding <tt>UIContact</tt> + * Returns the corresponding <tt>UIContactImpl</tt>. + * + * @return the corresponding <tt>UIContactImpl</tt> */ - public UIContact getContactDescriptor() + public UIContactImpl getContactDescriptor() { - return (UIContact) getUserObject(); + return (UIContactImpl) getUserObject(); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultContactList.java index 3ff9626..7113a6a 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultContactList.java @@ -16,10 +16,10 @@ import javax.swing.text.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.chat.*; import net.java.sip.communicator.impl.gui.main.chat.conference.*; -import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.skin.*; +import net.java.sip.communicator.util.swing.*; /** * DeafultContactlist used to display <code>JList</code>s with contacts. diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultTreeContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultTreeContactList.java index b795c48..aebf844 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultTreeContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultTreeContactList.java @@ -18,9 +18,10 @@ import net.java.sip.communicator.impl.gui.lookandfeel.*; import net.java.sip.communicator.impl.gui.main.*; import net.java.sip.communicator.impl.gui.main.chat.*; import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; -import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.util.skin.*; +import net.java.sip.communicator.util.swing.*; /** * DeafultContactlist used to display <code>JList</code>s with contacts. @@ -47,7 +48,7 @@ public class DefaultTreeContactList static { UIManager.getDefaults().put(uiClassID, - SIPCommTreeUI.class.getName()); + ExtendedTreeUI.class.getName()); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQueryListener.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQueryListener.java deleted file mode 100644 index cd4eaa3..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQueryListener.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -/** - * The <tt>FilterQueryListener</tt> is notified when a filter query finishes. - * - * @author Yana Stamcheva - */ -public interface FilterQueryListener -{ - /** - * Indicates that the given <tt>query</tt> has finished with success, i.e. - * the filter has returned results. - * @param query the <tt>FilterQuery</tt>, where this listener is registered - */ - public void filterQuerySucceeded(FilterQuery query); - - /** - * Indicates that the given <tt>query</tt> has finished with failure, i.e. - * no results for the filter were found. - * @param query the <tt>FilterQuery</tt>, where this listener is registered - */ - public void filterQueryFailed(FilterQuery query); -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/GroupNode.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/GroupNode.java index 11753db..2d053ae 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/GroupNode.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/GroupNode.java @@ -12,8 +12,9 @@ import javax.swing.*; import javax.swing.plaf.*; import javax.swing.tree.*; -import net.java.sip.communicator.impl.gui.lookandfeel.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.util.*; +import net.java.sip.communicator.util.swing.plaf.*; /** * The <tt>GroupNode</tt> is a <tt>ContactListNode</tt> corresponding to a @@ -39,7 +40,7 @@ public class GroupNode /** * The corresponding <tt>UIGroup</tt>. */ - private final UIGroup group; + private final UIGroupImpl group; /** * The <tt>ContactListNode</tt> <tt>Comparator</tt> used to sort the list of @@ -62,10 +63,10 @@ public class GroupNode * and the corresponding <tt>uiGroup</tt>. * * @param treeModel the parent tree model containing this group - * @param uiGroup the corresponding <tt>UIGroup</tt> + * @param uiGroup the corresponding <tt>UIGroupImpl</tt> */ public GroupNode( ContactListTreeModel treeModel, - UIGroup uiGroup) + UIGroupImpl uiGroup) { super(uiGroup, true); @@ -78,10 +79,10 @@ public class GroupNode /** * Creates a <tt>ContactNode</tt> for the given <tt>uiContact</tt> * and adds it to this group. - * @param uiContact the <tt>UIContact</tt> to add + * @param uiContact the <tt>UIContactImpl</tt> to add * @return the created <tt>ContactNode</tt> */ - public ContactNode addContact(UIContact uiContact) + public ContactNode addContact(UIContactImpl uiContact) { if (logger.isDebugEnabled()) logger.debug("Group node add contact: " @@ -107,11 +108,11 @@ public class GroupNode /** * Creates a <tt>ContactNode</tt> for the given <tt>uiContact</tt>, * adds it to this group and performs a sort at the end. - * @param uiContact the <tt>UIContact</tt> to add + * @param uiContact the <tt>UIContactImpl</tt> to add * @return the created <tt>ContactNode</tt> */ @SuppressWarnings("unchecked") - public ContactNode sortedAddContact(UIContact uiContact) + public ContactNode sortedAddContact(UIContactImpl uiContact) { if (logger.isDebugEnabled()) logger.debug("Group node sorted add contact: " @@ -136,9 +137,9 @@ public class GroupNode /** * Removes the node corresponding to the given <tt>uiContact</tt> from this * group. - * @param uiContact the <tt>UIContact</tt> to remove + * @param uiContact the <tt>UIContactImpl</tt> to remove */ - public void removeContact(UIContact uiContact) + public void removeContact(UIContactImpl uiContact) { final ContactNode contactNode = uiContact.getContactNode(); @@ -164,10 +165,10 @@ public class GroupNode /** * Creates a <tt>GroupNode</tt> for the given <tt>uiGroup</tt> and * adds it to this group. - * @param uiGroup the <tt>UIGroup</tt> to add + * @param uiGroup the <tt>UIGroupImpl</tt> to add * @return the created <tt>GroupNode</tt> */ - public GroupNode addContactGroup(UIGroup uiGroup) + public GroupNode addContactGroup(UIGroupImpl uiGroup) { int selectedIndex = getLeadSelectionRow(); @@ -189,9 +190,9 @@ public class GroupNode /** * Removes the node corresponding to the given <tt>uiGroup</tt> from this * group node. - * @param uiGroup the <tt>UIGroup</tt> to remove + * @param uiGroup the <tt>UIGroupImpl</tt> to remove */ - public void removeContactGroup(UIGroup uiGroup) + public void removeContactGroup(UIGroupImpl uiGroup) { GroupNode groupNode = uiGroup.getGroupNode(); @@ -216,11 +217,11 @@ public class GroupNode /** * Creates a <tt>GroupNode</tt> for the given <tt>uiGroup</tt>, * adds it to this group node and performs a sort at the end. - * @param uiGroup the <tt>UIGroup</tt> to add + * @param uiGroup the <tt>UIGroupImpl</tt> to add * @return the created <tt>GroupNode</tt> */ @SuppressWarnings("unchecked") - public GroupNode sortedAddContactGroup(UIGroup uiGroup) + public GroupNode sortedAddContactGroup(UIGroupImpl uiGroup) { GroupNode groupNode = new GroupNode(treeModel, uiGroup); @@ -243,9 +244,9 @@ public class GroupNode * Returns the <tt>UIGroup</tt> corresponding to this <tt>GroupNode</tt>. * @return the <tt>UIGroup</tt> corresponding to this <tt>GroupNode</tt> */ - public UIGroup getGroupDescriptor() + public UIGroupImpl getGroupDescriptor() { - return (UIGroup) getUserObject(); + return (UIGroupImpl) getUserObject(); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/MetaContactRightButtonMenu.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/MetaContactRightButtonMenu.java index 7a21c08..9a543cb 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/MetaContactRightButtonMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/MetaContactRightButtonMenu.java @@ -26,6 +26,7 @@ import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.gui.Container; +import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.OperationSetExtendedAuthorizations.SubscriptionStatus; import net.java.sip.communicator.service.protocol.ServerStoredDetails.FaxDetail; @@ -1198,6 +1199,16 @@ public class MetaContactRightButtonMenu } /** + * We're not interested in group selection events here. + */ + public void groupSelected(ContactListEvent evt) {} + + /** + * We're not interested in contact selection events here. + */ + public void contactSelected(ContactListEvent evt) {} + + /** * Moves the previously chosen sub-contact in the given toMetaContact. * * @param toMetaContact the MetaContact, where to move the previously diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/MoveSubcontactMessageDialog.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/MoveSubcontactMessageDialog.java index 787efb9..2d95a87 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/MoveSubcontactMessageDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/MoveSubcontactMessageDialog.java @@ -15,6 +15,7 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.customcontrols.*; import net.java.sip.communicator.impl.gui.main.*; import net.java.sip.communicator.impl.gui.utils.*; +import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.util.skin.*; import net.java.sip.communicator.util.swing.*; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/PresenceFilter.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/PresenceFilter.java index 1393569..3bf255e 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/PresenceFilter.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/PresenceFilter.java @@ -12,6 +12,7 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/SearchField.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/SearchField.java index 931eed7..c97ad48 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/SearchField.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/SearchField.java @@ -13,6 +13,8 @@ import javax.swing.event.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.*; +import net.java.sip.communicator.service.gui.*; +import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.util.skin.*; import net.java.sip.communicator.util.swing.*; import net.java.sip.communicator.util.swing.event.*; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/SearchFilter.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/SearchFilter.java index aa36661..202ae0c 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/SearchFilter.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/SearchFilter.java @@ -12,6 +12,7 @@ import java.util.regex.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; import net.java.sip.communicator.service.contactsource.*; +import net.java.sip.communicator.service.gui.*; /** * The <tt>SearchFilter</tt> is a <tt>ContactListFilter</tt> that filters the @@ -50,7 +51,7 @@ public class SearchFilter /** * The list of external contact sources to search in. */ - private Collection<ExternalContactSource> contactSources; + private Collection<UIContactSource> contactSources; /** * The type of the search source. One of the above defined DEFAUT_SOURCE or @@ -88,13 +89,14 @@ public class SearchFilter if (filterQuery.isCanceled()) return; - Iterator<ExternalContactSource> filterSources + Iterator<UIContactSource> filterSources = getContactSources().iterator(); // Then we apply the filter on all its contact sources. while (filterSources.hasNext()) { - final ExternalContactSource filterSource = filterSources.next(); + final UIContactSource filterSource + = filterSources.next(); // If we have stopped filtering in the mean time we return here. if (filterQuery.isCanceled()) @@ -115,7 +117,7 @@ public class SearchFilter * filter to * @return the <tt>ContactQuery</tt> that tracks this filter */ - public ContactQuery applyFilter(ExternalContactSource contactSource) + public ContactQuery applyFilter(UIContactSource contactSource) { ContactSourceService sourceService = contactSource.getContactSourceService(); @@ -236,8 +238,9 @@ public class SearchFilter { ContactSourceService contactSource = sourceContact.getContactSource(); - ExternalContactSource sourceUI - = TreeContactList.getContactSource(contactSource); + + UIContactSource sourceUI + = GuiActivator.getContactList().getContactSource(contactSource); if (sourceUI != null // ExtendedContactSourceService has already matched the @@ -252,7 +255,7 @@ public class SearchFilter true); } else - ExternalContactSource.removeUIContact(sourceContact); + sourceUI.removeUIContact(sourceContact); } /** @@ -266,14 +269,15 @@ public class SearchFilter switch(searchSourceType) { case DEFAULT_SOURCE: - contactSources = TreeContactList.getContactSources(); + contactSources + = GuiActivator.getContactList().getContactSources(); break; case HISTORY_SOURCE: { - Collection<ExternalContactSource> historySources - = new LinkedList<ExternalContactSource>(); - ExternalContactSource historySource - = TreeContactList.getContactSource( + Collection<UIContactSource> historySources + = new LinkedList<UIContactSource>(); + UIContactSource historySource + = GuiActivator.getContactList().getContactSource( ContactSourceService.CALL_HISTORY); historySources.add(historySource); @@ -289,10 +293,10 @@ public class SearchFilter * @return the list of <tt>ExternalContactSource</tt> this filter searches * in */ - public Collection<ExternalContactSource> getContactSources() + public Collection<UIContactSource> getContactSources() { if (contactSources == null) - contactSources = TreeContactList.getContactSources(); + contactSources = GuiActivator.getContactList().getContactSources(); return contactSources; } diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/SimpleContactList.java index ae2a392..15eeb86 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/SimpleContactList.java @@ -19,6 +19,7 @@ import net.java.sip.communicator.impl.gui.main.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.contactlist.event.*; +import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.systray.*; import net.java.sip.communicator.util.*; @@ -32,7 +33,7 @@ import net.java.sip.communicator.util.*; * @author Yana Stamcheva * @author Lubomir Marinov */ -public class ContactList +public class SimpleContactList extends DefaultContactList implements MetaContactListListener, MouseListener @@ -48,7 +49,7 @@ public class ContactList private static final String MODIFY_OPERATION = "ModifyOperation"; - private final Logger logger = Logger.getLogger(ContactList.class); + private final Logger logger = Logger.getLogger(SimpleContactList.class); private final MetaContactListService contactListService; @@ -91,7 +92,7 @@ public class ContactList * * @param mainFrame The main application window. */ - public ContactList(MainFrame mainFrame) + public SimpleContactList(MainFrame mainFrame) { this.mainFrame = mainFrame; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java index e11ad77..545955c 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java @@ -23,6 +23,8 @@ import net.java.sip.communicator.impl.gui.main.contactlist.notifsource.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.contactsource.*; +import net.java.sip.communicator.service.gui.*; +import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.Logger; @@ -38,11 +40,13 @@ import org.osgi.framework.*; */ public class TreeContactList extends DefaultTreeContactList - implements ContactQueryListener, + implements ContactList, + ContactQueryListener, MetaContactQueryListener, MouseListener, MouseMotionListener, - TreeExpansionListener + TreeExpansionListener, + TreeSelectionListener { /** * Serial version UID. @@ -63,7 +67,7 @@ public class TreeContactList /** * The right button menu. */ - private JPopupMenu rightButtonMenu; + private Component rightButtonMenu; /** * A list of all contacts that are currently "active". An "active" contact @@ -107,7 +111,7 @@ public class TreeContactList /** * The current filter. */ - private ContactListFilter currentFilter; + private ContactListFilter currentFilter = defaultFilter; /** * Indicates if the click on a group node has been already consumed. This @@ -120,12 +124,12 @@ public class TreeContactList */ private MouseListener[] originalMouseListeners; - private static final Collection<ExternalContactSource> contactSources - = new LinkedList<ExternalContactSource>(); + private final Collection<UIContactSource> + contactSources = new LinkedList<UIContactSource>(); private static NotificationContactSource notificationSource; - private FilterQuery currentFilterQuery; + private UIFilterQuery currentFilterQuery; private FilterThread filterThread; @@ -148,6 +152,7 @@ public class TreeContactList this.addMouseListener(this); this.addMouseMotionListener(this); this.addTreeExpansionListener(this); + this.addTreeSelectionListener(this); GuiActivator.getContactListService() .addMetaContactListListener(mclSource); @@ -176,8 +181,7 @@ public class TreeContactList ContactSourceService contactSource = sourceContact.getContactSource(); - ExternalContactSource sourceUI - = TreeContactList.getContactSource(contactSource); + UIContactSource sourceUI = getContactSource(contactSource); if (sourceUI == null) return; @@ -196,7 +200,7 @@ public class TreeContactList } else { - ExternalContactSource.removeUIContact(sourceContact); + sourceUI.removeUIContact(sourceContact); uiContact = null; } } @@ -213,14 +217,13 @@ public class TreeContactList ContactSourceService contactSource = sourceContact.getContactSource(); - ExternalContactSource sourceUI - = TreeContactList.getContactSource(contactSource); + UIContactSource sourceUI = getContactSource(contactSource); if (sourceUI == null) return; UIContact uiContact - = ExternalContactSource.getUIContact(sourceContact); + = sourceUI.getUIContact(sourceContact); if(uiContact == null) return; @@ -235,6 +238,35 @@ public class TreeContactList } /** + * Indicates that a contact has been updated after a search. + * @param event the <tt>ContactQueryEvent</tt> containing information + * about the updated <tt>SourceContact</tt> + */ + public void contactChanged(ContactChangedEvent event) + { + final SourceContact sourceContact = event.getContact(); + + ContactSourceService contactSource + = sourceContact.getContactSource(); + + UIContactSource sourceUI = getContactSource(contactSource); + + if (sourceUI == null) + return; + + UIContact uiContact + = sourceUI.getUIContact(sourceContact); + + if(uiContact == null || !(uiContact instanceof UIContactImpl)) + return; + + ContactNode contactNode = ((UIContactImpl) uiContact).getContactNode(); + + if (contactNode != null) + nodeChanged(contactNode); + } + + /** * Indicates that a <tt>MetaContact</tt> has been received for a search in * the <tt>MetaContactListService</tt>. * @param event the received <tt>MetaContactQueryEvent</tt> @@ -355,7 +387,7 @@ public class TreeContactList */ public void setActiveContact(MetaContact metaContact, boolean isActive) { - UIContact uiContact + UIContactImpl uiContact = MetaContactListSource.getUIContact(metaContact); if (uiContact == null) @@ -389,7 +421,7 @@ public class TreeContactList * @return <tt>true</tt> if the given <tt>metaContact</tt> has been * previously set to active, otherwise returns <tt>false</tt> */ - public boolean isContactActive(UIContact contact) + public boolean isContactActive(UIContactImpl contact) { ContactNode contactNode = contact.getContactNode(); @@ -423,30 +455,40 @@ public class TreeContactList return; } - GroupNode groupNode; + GroupNode groupNode = null; if (group == null) groupNode = treeModel.getRoot(); - else + else if (group instanceof UIGroupImpl) { - groupNode = group.getGroupNode(); + UIGroupImpl contactImpl = (UIGroupImpl) group; + + groupNode = contactImpl.getGroupNode(); if (groupNode == null) { GroupNode parentNode = treeModel.getRoot(); if (isGroupSorted) - groupNode = parentNode.sortedAddContactGroup(group); + groupNode = parentNode.sortedAddContactGroup(contactImpl); else - groupNode = parentNode.addContactGroup(group); + groupNode = parentNode.addContactGroup(contactImpl); } } + if (groupNode == null) + return; + contact.setParentGroup(groupNode.getGroupDescriptor()); + if (!(contact instanceof UIContactImpl)) + return; + + UIContactImpl contactImpl = (UIContactImpl) contact; + if (isContactSorted) - groupNode.sortedAddContact(contact); + groupNode.sortedAddContact(contactImpl); else - groupNode.addContact(contact); + groupNode.addContact(contactImpl); if ((!currentFilter.equals(presenceFilter) || !groupNode.isCollapsed())) @@ -526,7 +568,8 @@ public class TreeContactList * @param contact the <tt>UIContact</tt> to remove * @param removeEmptyGroup whether we should delete the group if is empty */ - public void removeContact(final UIContact contact, final boolean removeEmptyGroup) + public void removeContact( final UIContact contact, + final boolean removeEmptyGroup) { if (!SwingUtilities.isEventDispatchThread()) { @@ -540,7 +583,10 @@ public class TreeContactList return; } - UIGroup parentGroup = contact.getParentGroup(); + if (!(contact instanceof UIContactImpl)) + return; + + UIGroupImpl parentGroup = (UIGroupImpl) contact.getParentGroup(); if (parentGroup == null) return; @@ -551,7 +597,7 @@ public class TreeContactList if (parentGroupNode == null) return; - parentGroupNode.removeContact(contact); + parentGroupNode.removeContact((UIContactImpl) contact); // If the parent group is empty remove it. if (removeEmptyGroup && parentGroupNode.getChildCount() == 0) @@ -593,7 +639,10 @@ public class TreeContactList return; } - treeModel.nodeChanged(contact.getContactNode()); + if (!(contact instanceof UIContactImpl)) + return; + + treeModel.nodeChanged(((UIContactImpl) contact).getContactNode()); } /** @@ -616,16 +665,21 @@ public class TreeContactList return; } - GroupNode groupNode = group.getGroupNode(); - + if (!(group instanceof UIGroupImpl)) + return; + + UIGroupImpl groupImpl = (UIGroupImpl) group; + + GroupNode groupNode = groupImpl.getGroupNode(); + if(groupNode == null) { GroupNode parentNode = treeModel.getRoot(); if (isSorted) - parentNode.sortedAddContactGroup(group); + parentNode.sortedAddContactGroup(groupImpl); else - parentNode.addContactGroup(group); + parentNode.addContactGroup(groupImpl); } expandGroup(treeModel.getRoot()); @@ -649,7 +703,10 @@ public class TreeContactList return; } - UIGroup parentGroup = group.getParentGroup(); + if (!(group instanceof UIGroupImpl)) + return; + + UIGroupImpl parentGroup = (UIGroupImpl) group.getParentGroup(); GroupNode parentGroupNode; @@ -667,7 +724,7 @@ public class TreeContactList if (parentGroupNode == null) return; - parentGroupNode.removeContactGroup(group); + parentGroupNode.removeContactGroup((UIGroupImpl) group); // If the parent group is empty remove it. if (parentGroupNode.getChildCount() == 0) @@ -765,7 +822,7 @@ public class TreeContactList if (currentFilterQuery != null && !currentFilterQuery.isCanceled()) currentFilterQuery.cancel(); - currentFilterQuery = new FilterQuery(); + currentFilterQuery = new UIFilterQuery(); if (filterThread == null) { @@ -803,7 +860,7 @@ public class TreeContactList { while (true) { - FilterQuery filterQuery = currentFilterQuery; + UIFilterQuery filterQuery = currentFilterQuery; ContactListFilter filter = this.filter; treeModel.clear(); @@ -945,6 +1002,12 @@ public class TreeContactList case ContactListEvent.GROUP_CLICKED: listener.groupClicked(event); break; + case ContactListEvent.CONTACT_SELECTED: + listener.contactSelected(event); + break; + case ContactListEvent.GROUP_SELECTED: + listener.groupSelected(event); + break; default: logger.error("Unknown event type " + event.getEventID()); } @@ -1152,7 +1215,9 @@ public class TreeContactList SwingUtilities.convertPointToScreen(contactListPoint, this); - rightButtonMenu.setInvoker(this); + if (rightButtonMenu instanceof JPopupMenu) + ((JPopupMenu) rightButtonMenu).setInvoker(this); + rightButtonMenu.setLocation(contactListPoint.x, contactListPoint.y); rightButtonMenu.setVisible(true); } @@ -1443,7 +1508,7 @@ public class TreeContactList for (ContactSourceService contactSource : GuiActivator.getContactSources()) { - contactSources.add(new ExternalContactSource(contactSource)); + contactSources.add(new ExternalContactSource(contactSource, this)); } GuiActivator.bundleContext.addServiceListener( new ContactSourceServiceListener()); @@ -1453,7 +1518,7 @@ public class TreeContactList * Returns the list of registered contact sources to search in. * @return the list of registered contact sources to search in */ - public static Collection<ExternalContactSource> getContactSources() + public Collection<UIContactSource> getContactSources() { return contactSources; } @@ -1478,15 +1543,14 @@ public class TreeContactList * @return the <tt>ExternalContactSource</tt> corresponding to the given * <tt>ContactSourceService</tt> */ - public static ExternalContactSource getContactSource( - ContactSourceService contactSource) + public UIContactSource getContactSource(ContactSourceService contactSource) { - Iterator<ExternalContactSource> extSourcesIter + Iterator<UIContactSource> extSourcesIter = contactSources.iterator(); while (extSourcesIter.hasNext()) { - ExternalContactSource extSource = extSourcesIter.next(); + UIContactSource extSource = extSourcesIter.next(); if (extSource.getContactSourceService().equals(contactSource)) return extSource; @@ -1499,14 +1563,14 @@ public class TreeContactList * @param identifier the identifier we're looking for * @return the contact source with the given identifier */ - public static ExternalContactSource getContactSource(String identifier) + public UIContactSource getContactSource(String identifier) { - Iterator<ExternalContactSource> extSourcesIter + Iterator<UIContactSource> extSourcesIter = contactSources.iterator(); while (extSourcesIter.hasNext()) { - ExternalContactSource extSource = extSourcesIter.next(); + UIContactSource extSource = extSourcesIter.next(); if (extSource.getContactSourceService().getIdentifier() .equals(identifier)) @@ -1524,7 +1588,7 @@ public class TreeContactList * @param imgWidth the desired image width * @param imgHeight the desired image height */ - public static void setSourceContactImage( String contactString, + public void setSourceContactImage( String contactString, final JLabel label, final int imgWidth, final int imgHeight) @@ -1536,8 +1600,8 @@ public class TreeContactList Pattern filterPattern = Pattern.compile( "^" + Pattern.quote(contactString) + "$", Pattern.UNICODE_CASE); - Iterator<ExternalContactSource> contactSources - = TreeContactList.getContactSources().iterator(); + Iterator<UIContactSource> contactSources + = getContactSources().iterator(); final Vector<ContactQuery> loadedQueries = new Vector<ContactQuery>(); @@ -1589,6 +1653,14 @@ public class TreeContactList */ public void contactRemoved(ContactRemovedEvent event) {} + + /** + * Indicates that a contact has been updated after a search. + * @param event the <tt>ContactQueryEvent</tt> containing information + * about the updated <tt>SourceContact</tt> + */ + public void contactChanged(ContactChangedEvent event) + {} }); // If the image search has been canceled from one of the @@ -1792,12 +1864,13 @@ public class TreeContactList { case ServiceEvent.REGISTERED: ExternalContactSource contactSource - = new ExternalContactSource((ContactSourceService) service); + = new ExternalContactSource( + (ContactSourceService) service, TreeContactList.this); contactSources.add(contactSource); changed = true; break; case ServiceEvent.UNREGISTERING: - ExternalContactSource cSource + UIContactSource cSource = getContactSource((ContactSourceService) service); if (cSource != null) contactSources.remove(cSource); @@ -1887,4 +1960,124 @@ public class TreeContactList { return mclSource; } + + public Component getComponent() + { + return this; + } + + /** + * Selects the given <tt>UIContact</tt> in the contact list. + * + * @param uiContact the contact to select + */ + public void setSelectedContact(final UIContact uiContact) + { + if (!SwingUtilities.isEventDispatchThread()) + { + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + setSelectedContact(uiContact); + } + }); + return; + } + + if (!(uiContact instanceof UIContactImpl)) + return; + + setSelectionPath(new TreePath( + ((UIContactImpl) uiContact).getContactNode().getPath())); + } + + /** + * Selects the given <tt>UIGroup</tt> in the contact list. + * + * @param uiGroup the group to select + */ + public void setSelectedGroup(final UIGroup uiGroup) + { + if (!SwingUtilities.isEventDispatchThread()) + { + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + setSelectedGroup(uiGroup); + } + }); + return; + } + + if (!(uiGroup instanceof UIGroupImpl)) + return; + + setSelectionPath(new TreePath( + ((UIGroupImpl) uiGroup).getGroupNode().getPath())); + } + + /** + * Returns the currently selected <tt>UIContact</tt> if there's one. + * + * @return the currently selected <tt>UIContact</tt> if there's one. + */ + public UIContact getSelectedContact() + { + TreePath selectionPath = getSelectionPath(); + + if (selectionPath != null + && selectionPath.getLastPathComponent() instanceof ContactNode) + { + return ((ContactNode) selectionPath.getLastPathComponent()) + .getContactDescriptor(); + } + + return null; + } + + /** + * Returns the currently selected <tt>UIGroup</tt> if there's one. + * + * @return the currently selected <tt>UIGroup</tt> if there's one. + */ + public UIGroup getSelectedGroup() + { + TreePath selectionPath = getSelectionPath(); + + if (selectionPath != null + && selectionPath.getLastPathComponent() instanceof GroupNode) + { + return ((GroupNode) selectionPath.getLastPathComponent()) + .getGroupDescriptor(); + } + + return null; + } + + /** + * Indicates that a selection has occurred on the tree. + * + * @param e the <tt>TreeSelectionEvent</tt> that notified us of the change + */ + public void valueChanged(TreeSelectionEvent e) + { + UIGroup selectedGroup = getSelectedGroup(); + + if (selectedGroup != null) + { + fireContactListEvent( + selectedGroup, ContactListEvent.GROUP_SELECTED, 0); + } + else + { + UIContact selectedContact = getSelectedContact(); + if (selectedContact != null) + { + fireContactListEvent( + selectedContact, ContactListEvent.GROUP_SELECTED, 0); + } + } + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContact.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContact.java deleted file mode 100644 index 770a2a4..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContact.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -import java.util.*; - -import javax.swing.*; - -import net.java.sip.communicator.impl.gui.utils.*; -import net.java.sip.communicator.service.protocol.*; -import net.java.sip.communicator.util.swing.*; - -/** - * The <tt>UIContact</tt> represents the user interface contact contained in the - * contact list component. - * - * @author Yana Stamcheva - */ -public interface UIContact -{ - /** - * Returns the descriptor of this contact. - * - * @return the descriptor of this contact - */ - public Object getDescriptor(); - - /** - * Returns the display name of this contact. - * - * @return the display name of this contact - */ - public String getDisplayName(); - - /** - * Returns the display details of this contact. These would be shown - * whenever the contact is selected. - * - * @return the display details of this contact - */ - public String getDisplayDetails(); - - /** - * Returns the index of this contact in its source. - * - * @return the source index - */ - public int getSourceIndex(); - - /** - * Returns the avatar of this contact. - * - * @param isSelected indicates if the contact is selected - * @param width the width of the avatar - * @param height the height of the avatar - * @return the avatar of this contact - */ - public ImageIcon getAvatar(boolean isSelected, int width, int height); - - /** - * Returns the status icon of this contact or null if no status is - * available. - * - * @return the status icon of this contact or null if no status is - * available - */ - public ImageIcon getStatusIcon(); - - /** - * Creates a tool tip for this contact. If such tooltip is - * provided it would be shown on mouse over over this <tt>UIContact</tt>. - * - * @return the tool tip for this contact descriptor - */ - public ExtendedTooltip getToolTip(); - - /** - * Returns the right button menu component. - * - * @return the right button menu component - */ - public JPopupMenu getRightButtonMenu(); - - /** - * Returns the parent group. - * - * @return the parent group - */ - public UIGroup getParentGroup(); - - /** - * Sets the given <tt>UIGroup</tt> to be the parent group of this - * <tt>UIContact</tt>. - * - * @param parentGroup the parent <tt>UIGroup</tt> of this contact - */ - public void setParentGroup(UIGroup parentGroup); - - /** - * Returns an <tt>Iterator</tt> over a list of the search strings of this - * contact. - * - * @return an <tt>Iterator</tt> over a list of the search strings of this - * contact - */ - public Iterator<String> getSearchStrings(); - - /** - * Returns the corresponding <tt>ContactNode</tt>. The <tt>ContactNode</tt> - * is the real node that is stored in the contact list component data model. - * - * @return the corresponding <tt>ContactNode</tt> - */ - public ContactNode getContactNode(); - - /** - * Sets the given <tt>contactNode</tt>. The <tt>ContactNode</tt> - * is the real node that is stored in the contact list component data model. - * - * @param contactNode the <tt>ContactNode</tt> that corresponds to this - * <tt>UIGroup</tt> - */ - public void setContactNode(ContactNode contactNode); - - /** - * Returns the default <tt>ContactDetail</tt> to use for any operations - * depending to the given <tt>OperationSet</tt> class. - * - * @param opSetClass the <tt>OperationSet</tt> class we're interested in - * @return the default <tt>ContactDetail</tt> to use for any operations - * depending to the given <tt>OperationSet</tt> class - */ - public UIContactDetail getDefaultContactDetail( - Class<? extends OperationSet> opSetClass); - - /** - * Returns a list of all <tt>UIContactDetail</tt>s corresponding to the - * given <tt>OperationSet</tt> class. - * - * @param opSetClass the <tt>OperationSet</tt> class we're looking for - * @return a list of all <tt>UIContactDetail</tt>s corresponding to the - * given <tt>OperationSet</tt> class - */ - public List<UIContactDetail> getContactDetailsForOperationSet( - Class<? extends OperationSet> opSetClass); - - /** - * Returns a list of all <tt>UIContactDetail</tt>s within this - * <tt>UIContact</tt>. - * - * @return a list of all <tt>UIContactDetail</tt>s within this - * <tt>UIContact</tt> - */ - public List<UIContactDetail> getContactDetails(); - - /** - * Returns all custom action buttons for this notification contact. - * - * @return a list of all custom action buttons for this notification contact - */ - public Collection<SIPCommButton> getContactCustomActionButtons(); -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetail.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetail.java deleted file mode 100644 index 3790f68..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetail.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -import java.util.*; - -import javax.swing.*; - -import net.java.sip.communicator.service.protocol.*; - -/** - * The <tt>UIContactDetail</tt> corresponds to a particular contact detail, - * phone number, IM identifier, email, etc. which has it's preferred mode of - * transport <tt>ProtocolProviderService</tt>. - * - * @author Yana Stamcheva - */ -public abstract class UIContactDetail -{ - /** - * The prefix to be used when calling this contact detail. - */ - private String prefix; - - /** - * The address of this detail. - */ - private final String address; - - /** - * The display name of this detail. - */ - private final String displayName; - - /** - * The status icon of this contact detail. - */ - private final ImageIcon statusIcon; - - /** - * The <tt>ProtocolProviderService</tt> corresponding to this detail. - */ - private final ProtocolProviderService protocolProvider; - - /** - * The protocol to be used for this contact detail if no protocol provider - * is set. - */ - private final String preferredProtocol; - - /** - * The collection of labels associated with this detail. - */ - private final Collection<String> labels; - - /** - * The category of the underlying contact detail. - */ - private final String category; - - /** - * The underlying object that this class is wrapping - */ - private final Object descriptor; - - /** - * Creates a <tt>UIContactDetail</tt> by specifying the contact - * <tt>address</tt>, the <tt>displayName</tt> and <tt>preferredProvider</tt>. - * @param address the contact address - * @param displayName the contact display name - * @param category the category of the underlying contact detail - * @param labels the collection of labels associated with this detail - * @param statusIcon the status icon of this contact detail - * @param preferredProvider the preferred protocol provider - * @param preferredProtocol the preferred protocol if no protocol provider - * is set - * @param descriptor the underlying object that this class is wrapping - */ - public UIContactDetail( - String address, - String displayName, - String category, - Collection<String> labels, - ImageIcon statusIcon, - ProtocolProviderService preferredProvider, - String preferredProtocol, - Object descriptor) - { - this.address = address; - this.displayName = displayName; - this.category = category; - this.labels = labels; - this.statusIcon = statusIcon; - this.protocolProvider = preferredProvider; - this.preferredProtocol = preferredProtocol; - this.descriptor = descriptor; - } - - /** - * Returns the display name of this detail. - * @return the display name of this detail - */ - public String getDisplayName() - { - return displayName; - } - - /** - * Returns the address of this detail. - * @return the address of this detail - */ - public String getAddress() - { - if (prefix != null && prefix.trim().length() >= 0) - return prefix + address; - - return address; - } - - /** - * Returns the category of the underlying detail. - * - * @return the category of the underlying detail - */ - public String getCategory() - { - return category; - } - - /** - * Returns an iterator over the collection of labels associated with this - * detail. - * - * @return an iterator over the collection of labels associated with this - * detail - */ - public Iterator<String> getLabels() - { - if (labels != null) - return labels.iterator(); - - return null; - } - - /** - * Returns the status icon of this contact detail. - * - * @return the status icon of this contact detail - */ - public ImageIcon getStatusIcon() - { - return statusIcon; - } - - /** - * Returns the protocol provider preferred for contacting this detail for - * the given <tt>OperationSet</tt> class. - * @param opSetClass the <tt>OperationSet</tt> class for which we're looking - * for provider - * @return the protocol provider preferred for contacting this detail - */ - public ProtocolProviderService getPreferredProtocolProvider( - Class<? extends OperationSet> opSetClass) - { - return protocolProvider; - } - - /** - * Returns the name of the protocol preferred for contacting this detail for - * the given <tt>OperationSet</tt> class if no preferred protocol provider - * is set. - * @param opSetClass the <tt>OperationSet</tt> class for which we're looking - * for protocol - * @return the name of the protocol preferred for contacting this detail - */ - public String getPreferredProtocol(Class<? extends OperationSet> opSetClass) - { - return preferredProtocol; - } - - /** - * Returns the prefix to be used when calling this contact detail. - * - * @return the prefix to be used when calling this contact detail - */ - public String getPrefix() - { - return prefix; - } - - /** - * Sets the prefix to be used when calling this contact detail. - * - * @param prefix the prefix to be used when calling this contact detail - */ - public void setPrefix(String prefix) - { - this.prefix = prefix; - } - - /** - * Returns the underlying object that this class is wrapping - * - * @return the underlying object that this class is wrapping - */ - public Object getDescriptor() - { - return descriptor; - } - - /** - * Returns the <tt>PresenceStatus</tt> of this <tt>ContactDetail</tt> or - * null if the detail doesn't support presence. - * @return the <tt>PresenceStatus</tt> of this <tt>ContactDetail</tt> or - * null if the detail doesn't support presence - */ - public abstract PresenceStatus getPresenceStatus(); -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailAction.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailAction.java deleted file mode 100644 index fb20936..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailAction.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -/** - * Defines an action for an <tt>UIContactDetail</tt>. - * - * @author Yana Stamcheva - */ -public interface UIContactDetailAction -{ - /** - * Indicates this action is executed for the given <tt>UIContactDetail</tt>. - * - * @param contactDetail the <tt>UIContactDetail</tt> for which this action - * is performed - * @param x the x coordinate of the action - * @param y the y coordinate of the action - */ - public void actionPerformed (UIContactDetail contactDetail, int x, int y); -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailImpl.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailImpl.java new file mode 100644 index 0000000..71b3634 --- /dev/null +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailImpl.java @@ -0,0 +1,83 @@ +/* + * Jitsi, 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.contactlist; + +import java.util.*; + +import javax.swing.*; + +import net.java.sip.communicator.service.gui.*; +import net.java.sip.communicator.service.protocol.*; + +/** + * The <tt>UIContactDetail</tt> implementation + * + * @author Yana Stamcheva + */ +public class UIContactDetailImpl + extends UIContactDetail +{ + /** + * The status icon of this contact detail. + */ + private ImageIcon statusIcon; + + /** + * Creates a <tt>UIContactDetailImpl</tt> by specifying the contact + * <tt>address</tt>, the <tt>displayName</tt> and <tt>preferredProvider</tt>. + * @param address the contact address + * @param displayName the contact display name + * @param category the category of the underlying contact detail + * @param labels the collection of labels associated with this detail + * @param statusIcon the status icon of this contact detail + * @param preferredProvider the preferred protocol provider + * @param preferredProtocol the preferred protocol if no protocol provider + * is set + * @param descriptor the underlying object that this class is wrapping + */ + public UIContactDetailImpl( + String address, + String displayName, + String category, + Collection<String> labels, + ImageIcon statusIcon, + ProtocolProviderService preferredProvider, + String preferredProtocol, + Object descriptor) + { + super(address, displayName, category, labels, preferredProvider, + preferredProtocol, descriptor); + + setStatusIcon(statusIcon); + } + + /** + * Sets the given status icon. + * + * @param statusIcon the status icon to set + */ + public void setStatusIcon(ImageIcon statusIcon) + { + this.statusIcon = statusIcon; + } + + /** + * Returns the status icon of this contact detail. + * + * @return the status icon of this contact detail + */ + public ImageIcon getStatusIcon() + { + return statusIcon; + } + + @Override + public PresenceStatus getPresenceStatus() + { + return null; + } +} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactImpl.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactImpl.java new file mode 100644 index 0000000..bd15e4b --- /dev/null +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactImpl.java @@ -0,0 +1,56 @@ +/* + * Jitsi, 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.contactlist; + +import javax.swing.*; + +import net.java.sip.communicator.service.gui.*; + +public abstract class UIContactImpl + extends UIContact +{ + /** + * Returns the corresponding <tt>ContactNode</tt>. The <tt>ContactNode</tt> + * is the real node that is stored in the contact list component data model. + * + * @return the corresponding <tt>ContactNode</tt> + */ + public abstract ContactNode getContactNode(); + + /** + * Sets the given <tt>contactNode</tt>. The <tt>ContactNode</tt> + * is the real node that is stored in the contact list component data model. + * + * @param contactNode the <tt>ContactNode</tt> that corresponds to this + * <tt>UIGroup</tt> + */ + public abstract void setContactNode(ContactNode contactNode); + + /** + * Returns the general status icon of the given MetaContact. Detects the + * status using the priority status table. The priority is defined on + * the "availability" factor and here the most "available" status is + * returned. + * + * @return PresenceStatus The most "available" status from all + * sub-contact statuses. + */ + public abstract ImageIcon getStatusIcon(); + + /** + * Gets the avatar of a specific <tt>MetaContact</tt> in the form of an + * <tt>ImageIcon</tt> value. + * + * @param isSelected indicates if the contact is selected + * @param width the desired icon width + * @param height the desired icon height + * @return an <tt>ImageIcon</tt> which represents the avatar of the + * specified <tt>MetaContact</tt> + */ + public abstract ImageIcon getAvatar( + boolean isSelected, int width, int height); +} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQuery.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIFilterQuery.java index 4ac17b9..441737d 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQuery.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIFilterQuery.java @@ -11,13 +11,16 @@ import java.util.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*; import net.java.sip.communicator.service.contactsource.*; +import net.java.sip.communicator.service.gui.*; +import net.java.sip.communicator.service.gui.event.*; /** * The <tt>FilterQuery</tt> gives information about a current filtering. * * @author Yana Stamcheva */ -public class FilterQuery +public class UIFilterQuery + extends FilterQuery implements ContactQueryListener, MetaContactQueryListener { @@ -315,7 +318,8 @@ public class FilterQuery GuiActivator.getContactList().addContact( query, moreInfoContact, - TreeContactList.getContactSource(contactSource).getUIGroup(), + GuiActivator.getContactList() + .getContactSource(contactSource).getUIGroup(), false); } } @@ -338,6 +342,14 @@ public class FilterQuery public void contactRemoved(ContactRemovedEvent event) {} + /** + * Indicates that a contact has been updated after a search. + * @param event the <tt>ContactQueryEvent</tt> containing information + * about the updated <tt>SourceContact</tt> + */ + public void contactChanged(ContactChangedEvent event) + {} + public void metaContactReceived(MetaContactQueryEvent event) {} public void metaGroupReceived(MetaGroupQueryEvent event) {} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIGroup.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIGroup.java deleted file mode 100644 index caa2cb9..0000000 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIGroup.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Jitsi, 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.contactlist; - -import javax.swing.*; - -/** - * The <tt>UIGroup</tt> represents the user interface contact list group. - * - * @author Yana Stamcheva - */ -public interface UIGroup -{ - /** - * Returns the descriptor of the group. This would be the underlying object - * that should provide all other necessary information for the group. - * - * @return the descriptor of the group - */ - public Object getDescriptor(); - - /** - * The display name of the group. The display name is the name to be shown - * in the contact list group row. - * - * @return the display name of the group - */ - public String getDisplayName(); - - /** - * Returns the index of this group in its source. In other words this is - * the descriptor index. - * - * @return the index of this group in its source - */ - public int getSourceIndex(); - - /** - * Returns the parent group. - * - * @return the parent group - */ - public UIGroup getParentGroup(); - - /** - * Indicates if the group is collapsed or expanded. - * - * @return <tt>true</tt> to indicate that the group is collapsed, - * <tt>false</tt> to indicate that it's expanded - */ - public boolean isGroupCollapsed(); - - /** - * Returns the count of online child contacts. - * - * @return the count of online child contacts - */ - public int countOnlineChildContacts(); - - /** - * Returns the child contacts count. - * - * @return child contacts count - */ - public int countChildContacts(); - - /** - * Returns the identifier of this group. - * - * @return the identifier of this group - */ - public String getId(); - - /** - * Returns the <tt>GroupNode</tt> corresponding to this <tt>UIGroup</tt>. - * The is the actual node used in the contact list component data model. - * - * @return the <tt>GroupNode</tt> corresponding to this <tt>UIGroup</tt> - */ - public GroupNode getGroupNode(); - - /** - * Sets the <tt>GroupNode</tt> corresponding to this <tt>UIGroup</tt>. - * - * @param groupNode the <tt>GroupNode</tt> to set. The is the actual - * node used in the contact list component data model. - */ - public void setGroupNode(GroupNode groupNode); - - /** - * Returns the right button menu for this group. - * - * @return the right button menu component for this group - */ - public JPopupMenu getRightButtonMenu(); -} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIGroupImpl.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIGroupImpl.java new file mode 100644 index 0000000..92658c4 --- /dev/null +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIGroupImpl.java @@ -0,0 +1,23 @@ +package net.java.sip.communicator.impl.gui.main.contactlist; + +import net.java.sip.communicator.service.gui.*; + +public abstract class UIGroupImpl + extends UIGroup +{ + /** + * Returns the <tt>GroupNode</tt> corresponding to this <tt>UIGroup</tt>. + * The is the actual node used in the contact list component data model. + * + * @return the <tt>GroupNode</tt> corresponding to this <tt>UIGroup</tt> + */ + public abstract GroupNode getGroupNode(); + + /** + * Sets the <tt>GroupNode</tt> corresponding to this <tt>UIGroup</tt>. + * + * @param groupNode the <tt>GroupNode</tt> to set. The is the actual + * node used in the contact list component data model. + */ + public abstract void setGroupNode(GroupNode groupNode); +} diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ExternalContactSource.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ExternalContactSource.java index d60a214..805e00b 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ExternalContactSource.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ExternalContactSource.java @@ -7,11 +7,13 @@ package net.java.sip.communicator.impl.gui.main.contactlist.contactsource; import javax.swing.*; +import javax.swing.tree.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.service.contactsource.*; import net.java.sip.communicator.service.customcontactactions.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.swing.*; import org.osgi.framework.*; @@ -28,6 +30,7 @@ import java.util.List; * @author Yana Stamcheva */ public class ExternalContactSource + implements UIContactSource { /** * The data key of the SourceContactDescriptor object used to store a @@ -57,6 +60,8 @@ public class ExternalContactSource private static Map<ContactAction<SourceContact>, SIPCommButton> customActionButtons; + private final JTree contactListTree; + /** * Creates an <tt>ExternalContactSource</tt> based on the given * <tt>ContactSourceService</tt>. @@ -64,11 +69,13 @@ public class ExternalContactSource * @param contactSource the <tt>ContactSourceService</tt>, on which this * <tt>ExternalContactSource</tt> is based */ - public ExternalContactSource(ContactSourceService contactSource) + public ExternalContactSource( ContactSourceService contactSource, + JTree contactListTree) { this.contactSource = contactSource; + this.contactListTree = contactListTree; - sourceUIGroup = new SourceUIGroup(contactSource.getDisplayName()); + sourceUIGroup = new SourceUIGroup(contactSource.getDisplayName(), this); } /** @@ -116,7 +123,7 @@ public class ExternalContactSource * @param sourceContact the <tt>SourceContact</tt>, which corresponding UI * contact we would like to remove */ - public static void removeUIContact(SourceContact sourceContact) + public void removeUIContact(SourceContact sourceContact) { sourceContact.setData(UI_CONTACT_DATA_KEY, null); } @@ -129,7 +136,7 @@ public class ExternalContactSource * @return the <tt>UIContact</tt> corresponding to the given * <tt>MetaContact</tt> */ - public static UIContact getUIContact(SourceContact sourceContact) + public UIContact getUIContact(SourceContact sourceContact) { return (UIContact) sourceContact.getData(UI_CONTACT_DATA_KEY); } @@ -139,7 +146,7 @@ public class ExternalContactSource * * @return a list of all custom action buttons for this meta contact */ - public static Collection<SIPCommButton> getContactCustomActionButtons( + public Collection<SIPCommButton> getContactCustomActionButtons( final SourceContact sourceContact) { customActionContact = sourceContact; @@ -192,19 +199,14 @@ public class ExternalContactSource /** * Initializes custom action buttons for this contact source. */ - private static void initCustomActionButtons() + private void initCustomActionButtons() { customActionButtons = new LinkedHashMap <ContactAction<SourceContact>, SIPCommButton>(); - CustomContactActionsChangeListener changeListener - = new CustomContactActionsChangeListener(); - for (CustomContactActionsService<SourceContact> ccas : getContactActionsServices()) { - ccas.addCustomContactActionsListener(changeListener); - Iterator<ContactAction<SourceContact>> actionIterator = ccas.getCustomContactActions(); @@ -254,13 +256,15 @@ public class ExternalContactSource button.getY() + button.getHeight()); SwingUtilities.convertPointToScreen( - location, GuiActivator.getContactList()); + location, contactListTree); - location.y = location.y - + GuiActivator.getContactList() - .getPathBounds( - GuiActivator.getContactList() - .getSelectionPath()).y; + TreePath selectionPath + = contactListTree.getSelectionPath(); + + if (selectionPath != null) + location.y = location.y + + contactListTree.getPathBounds( + selectionPath).y; contactAction.actionPerformed( contactDetails.get(0), @@ -326,8 +330,8 @@ public class ExternalContactSource * <tt>ExternalContactSource</tt>. It takes the name of the source and * sets it as a group name. */ - private class SourceUIGroup - implements UIGroup + public class SourceUIGroup + extends UIGroupImpl { /** * The display name of the group. @@ -339,13 +343,22 @@ public class ExternalContactSource */ private GroupNode groupNode; + private ExternalContactSource parentUISource; + /** * Creates an instance of <tt>SourceUIGroup</tt>. * @param name the name of the group */ - public SourceUIGroup(String name) + public SourceUIGroup( String name, + ExternalContactSource parentUISource) { this.displayName = name; + this.parentUISource = parentUISource; + } + + public ExternalContactSource getParentUISource() + { + return parentUISource; } /** @@ -413,7 +426,7 @@ public class ExternalContactSource */ public Object getDescriptor() { - return displayName; + return contactSource; } /** @@ -454,29 +467,6 @@ public class ExternalContactSource } /** - * Listens for updates on actions and when received update the source contact. - */ - private static class CustomContactActionsChangeListener - implements CustomContactActionsListener - { - /** - * Update for custom action has occurred. - * @param event the event containing the source which was updated. - */ - public void updated(CustomContactActionsEvent event) - { - if(!(event.getSource() instanceof SourceContact)) - return; - - ContactNode contactNode - = getUIContact((SourceContact)event.getSource()).getContactNode(); - - if (contactNode != null) - GuiActivator.getContactList().nodeChanged(contactNode); - } - } - - /** * An implementation of <tt>UIContactDetail</tt> for a custom action. */ private static class UIContactDetailCustomAction diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java index 8a8d69a..82ea955 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java @@ -21,6 +21,7 @@ import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.contactlist.event.*; import net.java.sip.communicator.service.customcontactactions.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.util.*; @@ -91,9 +92,9 @@ public class MetaContactListSource * @return the <tt>UIContact</tt> corresponding to the given * <tt>MetaContact</tt> */ - public static UIContact getUIContact(MetaContact metaContact) + public static UIContactImpl getUIContact(MetaContact metaContact) { - return (UIContact) metaContact.getData(UI_CONTACT_DATA_KEY); + return (UIContactImpl) metaContact.getData(UI_CONTACT_DATA_KEY); } /** @@ -101,12 +102,12 @@ public class MetaContactListSource * <tt>MetaContactGroup</tt>. * @param metaGroup the <tt>MetaContactGroup</tt>, which UI group we're * looking for - * @return the <tt>UIGroup</tt> corresponding to the given + * @return the <tt>UIGroupImpl</tt> corresponding to the given * <tt>MetaContactGroup</tt> */ - public static UIGroup getUIGroup(MetaContactGroup metaGroup) + public static UIGroupImpl getUIGroup(MetaContactGroup metaGroup) { - return (UIGroup) metaGroup.getData(UI_GROUP_DATA_KEY); + return (UIGroupImpl) metaGroup.getData(UI_GROUP_DATA_KEY); } /** @@ -126,7 +127,7 @@ public class MetaContactListSource * create an <tt>UIContact</tt> * @return an <tt>UIContact</tt> for the given <tt>metaContact</tt> */ - public static UIContact createUIContact(final MetaContact metaContact) + public static UIContactImpl createUIContact(final MetaContact metaContact) { final MetaUIContact descriptor = new MetaUIContact(metaContact); @@ -367,7 +368,7 @@ public class MetaContactListSource boolean uiContactCreated = false; - UIContact uiContact; + UIContactImpl uiContact; synchronized (metaContact) { @@ -439,7 +440,7 @@ public class MetaContactListSource public void childContactsReordered(MetaContactGroupEvent evt) { MetaContactGroup metaGroup = evt.getSourceMetaContactGroup(); - UIGroup uiGroup; + UIGroupImpl uiGroup; ContactListTreeModel treeModel = GuiActivator.getContactList().getTreeModel(); @@ -577,7 +578,7 @@ public class MetaContactListSource { final MetaContactGroup metaGroup = evt.getSourceMetaContactGroup(); - UIGroup uiGroup; + UIGroupImpl uiGroup; synchronized (metaGroup) { uiGroup = MetaContactListSource.getUIGroup(metaGroup); @@ -622,7 +623,7 @@ public class MetaContactListSource { MetaContact metaContact = evt.getSourceMetaContact(); - UIContact uiContact; + UIContactImpl uiContact; synchronized (metaContact) { uiContact = MetaContactListSource.getUIContact(metaContact); @@ -744,7 +745,7 @@ public class MetaContactListSource { MetaContact metaContact = evt.getSourceMetaContact(); - UIContact uiContact; + UIContactImpl uiContact; synchronized (metaContact) { uiContact = MetaContactListSource.getUIContact(metaContact); @@ -768,7 +769,7 @@ public class MetaContactListSource { MetaContact metaContact = evt.getSourceMetaContact(); - UIContact uiContact; + UIContactImpl uiContact; synchronized (metaContact) { uiContact = MetaContactListSource.getUIContact(metaContact); @@ -850,7 +851,7 @@ public class MetaContactListSource { MetaContact metaContact = evt.getNewParent(); - UIContact uiContact; + UIContactImpl uiContact; synchronized (metaContact) { uiContact = MetaContactListSource.getUIContact(metaContact); @@ -948,7 +949,7 @@ public class MetaContactListSource { final MetaContact oldParent = evt.getOldParent(); - UIContact oldUIContact; + UIContactImpl oldUIContact; synchronized (oldParent) { oldUIContact = MetaContactListSource.getUIContact(oldParent); @@ -1030,14 +1031,9 @@ public class MetaContactListSource customActionButtons = new LinkedHashMap<ContactAction<Contact>, SIPCommButton>(); - CustomContactActionsChangeListener changeListener - = new CustomContactActionsChangeListener(); - for (CustomContactActionsService<Contact> ccas : getContactActionsServices()) { - ccas.addCustomContactActionsListener(changeListener); - Iterator<ContactAction<Contact>> actionIterator = ccas.getCustomContactActions(); @@ -1105,45 +1101,6 @@ public class MetaContactListSource } /** - * Listens for updates on actions and when received update the contact. - */ - private static class CustomContactActionsChangeListener - implements CustomContactActionsListener - { - /** - * Update for custom action has occured. - * @param event the event containing the source which was updated. - */ - public void updated(CustomContactActionsEvent event) - { - if(!(event.getSource() instanceof Contact)) - return; - - MetaContact metaContact - = GuiActivator.getContactListService().findMetaContactByContact( - (Contact)event.getSource()); - - if (metaContact == null) - return; - - UIContact uiContact; - synchronized (metaContact) - { - uiContact = MetaContactListSource.getUIContact(metaContact); - } - - if (uiContact != null) - { - ContactNode contactNode - = uiContact.getContactNode(); - - if (contactNode != null) - GuiActivator.getContactList().nodeChanged(contactNode); - } - } - } - - /** * An implementation of <tt>UIContactDetail</tt> for a custom action. */ private static class UIContactDetailCustomAction diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java index 1cf6c2f..bb4b2f5 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java @@ -14,6 +14,7 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.OperationSetExtendedAuthorizations.SubscriptionStatus; @@ -34,7 +35,7 @@ import net.java.sip.communicator.util.swing.*; * @author Yana Stamcheva */ public class MetaUIContact - implements UIContact + extends UIContactImpl { /** * The key of the user data in <tt>MetaContact</tt> which specifies @@ -593,7 +594,8 @@ public class MetaUIContact * The implementation of the <tt>UIContactDetail</tt> interface for the * <tt>MetaContactListService</tt>. */ - private class MetaContactDetail extends UIContactDetail + private class MetaContactDetail + extends UIContactDetailImpl { /** * The underlying protocol contact. @@ -612,8 +614,7 @@ public class MetaUIContact contact.getDisplayName(), null, null, - new ImageIcon( - contact.getPresenceStatus().getStatusIcon()), + new ImageIcon(contact.getPresenceStatus().getStatusIcon()), contact.getProtocolProvider(), contact.getProtocolProvider().getProtocolName(), contact); diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIGroup.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIGroup.java index 536e7b2..2824d84 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIGroup.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIGroup.java @@ -12,6 +12,7 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactlist.*; +import net.java.sip.communicator.service.gui.*; /** * The <tt>MetaUIGroup</tt> is the implementation of the UIGroup for the @@ -21,7 +22,7 @@ import net.java.sip.communicator.service.contactlist.*; * @author Yana Stamcheva */ public class MetaUIGroup - implements UIGroup + extends UIGroupImpl { /** * The <tt>MetaContactGroup</tt>, on which this UI group is based. diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java index 904142b..d3ed3da 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java @@ -14,6 +14,8 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactsource.*; +import net.java.sip.communicator.service.gui.*; +import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.swing.*; @@ -22,8 +24,8 @@ import net.java.sip.communicator.util.swing.*; * @author Yana Stamcheva */ public class ShowMoreContact - implements UIContact, - ContactListListener + extends UIContactImpl + implements ContactListListener { /** * The string associated with this contact. @@ -54,7 +56,7 @@ public class ShowMoreContact /** * The count of shown contacts corresponding to the underlying query. */ - private int shownResultsCount = FilterQuery.MAX_EXTERNAL_RESULT_COUNT; + private int shownResultsCount = UIFilterQuery.MAX_EXTERNAL_RESULT_COUNT; /** * Creates an instance of <tt>MoreInfoContact</tt>. @@ -262,7 +264,7 @@ public class ShowMoreContact = new ArrayList<SourceContact>(queryResults); int newCount - = shownResultsCount + FilterQuery.MAX_EXTERNAL_RESULT_COUNT; + = shownResultsCount + UIFilterQuery.MAX_EXTERNAL_RESULT_COUNT; int resultSize = contacts.size(); @@ -283,7 +285,7 @@ public class ShowMoreContact GuiActivator.getContactList().addContact( contactQuery, this, - TreeContactList.getContactSource( + GuiActivator.getContactList().getContactSource( contactQuery.getContactSource()).getUIGroup(), false); @@ -293,6 +295,16 @@ public class ShowMoreContact public void groupClicked(ContactListEvent evt) {} /** + * We're not interested in group selection events here. + */ + public void groupSelected(ContactListEvent evt) {} + + /** + * We're not interested in contact selection events here. + */ + public void contactSelected(ContactListEvent evt) {} + + /** * Returns all custom action buttons for this meta contact. * * @return a list of all custom action buttons for this meta contact diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/SourceUIContact.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/SourceUIContact.java index 0098beb..2bbd010 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/SourceUIContact.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/SourceUIContact.java @@ -16,12 +16,11 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.contactsource.*; -import net.java.sip.communicator.service.customcontactactions.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.globalstatus.*; import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.swing.*; -import org.osgi.framework.*; /** * The <tt>SourceUIContact</tt> is the implementation of the UIContact for the @@ -30,7 +29,7 @@ import org.osgi.framework.*; * @author Yana Stamcheva */ public class SourceUIContact - implements UIContact + extends UIContactImpl { /** * The corresponding <tt>SourceContact</tt>, on which this abstraction is @@ -46,7 +45,7 @@ public class SourceUIContact /** * The parent <tt>UIGroup</tt>. */ - private UIGroup uiGroup; + private ExternalContactSource.SourceUIGroup uiGroup; /** * The search strings for this <tt>UIContact</tt>. @@ -63,7 +62,7 @@ public class SourceUIContact * @param parentGroup the parent <tt>UIGroup</tt> */ public SourceUIContact( SourceContact contact, - UIGroup parentGroup) + ExternalContactSource.SourceUIGroup parentGroup) { this.sourceContact = contact; this.uiGroup = parentGroup; @@ -121,6 +120,11 @@ public class SourceUIContact */ public ImageIcon getStatusIcon() { + PresenceStatus status = sourceContact.getPresenceStatus(); + + if (status != null) + return new ImageIcon(Constants.getStatusIcon(status)); + return new ImageIcon(GlobalStatusEnum.OFFLINE.getStatusIcon()); } @@ -284,14 +288,15 @@ public class SourceUIContact { this.contactNode = contactNode; if (contactNode == null) - ExternalContactSource.removeUIContact(sourceContact); + uiGroup.getParentUISource().removeUIContact(sourceContact); } /** * The implementation of the <tt>UIContactDetail</tt> interface for the * external source <tt>ContactDetail</tt>s. */ - protected static class SourceContactDetail extends UIContactDetail + protected static class SourceContactDetail + extends UIContactDetailImpl { /** * Creates an instance of <tt>SourceContactDetail</tt> by specifying @@ -479,7 +484,7 @@ public class SourceUIContact public Collection<SIPCommButton> getContactCustomActionButtons() { if (sourceContact != null) - return ExternalContactSource + return uiGroup.getParentUISource() .getContactCustomActionButtons(sourceContact); return null; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java index 95aec4e..aab3c20 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java @@ -14,6 +14,7 @@ import javax.swing.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.utils.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.OperationSetMessageWaiting.*; import net.java.sip.communicator.service.protocol.event.*; @@ -31,8 +32,8 @@ import org.jitsi.service.resources.*; * @author Yana Stamcheva */ public class NotificationContact - implements UIContact, - RegistrationStateChangeListener, + extends UIContact + implements RegistrationStateChangeListener, ProviderPresenceStatusListener { /** @@ -453,7 +454,7 @@ public class NotificationContact * external source <tt>ContactDetail</tt>s. */ private class MessageWaitingDetail - extends UIContactDetail + extends UIContactDetailImpl { /** * Creates an instance of <tt>SourceContactDetail</tt> by specifying diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java index 5697fdb..efbe4d5 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java @@ -18,6 +18,7 @@ import org.osgi.framework.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.service.customcontactactions.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.OperationSetMessageWaiting.MessageType; import net.java.sip.communicator.service.protocol.event.*; diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationGroup.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationGroup.java index 0df6e66..d566366 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationGroup.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationGroup.java @@ -13,6 +13,7 @@ import javax.swing.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; @@ -24,7 +25,7 @@ import net.java.sip.communicator.service.protocol.event.*; * @author Yana Stamcheva */ public class NotificationGroup - implements UIGroup + extends UIGroup { /** * The type of the notification message, identifying this group. |