aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYana Stamcheva <yana@jitsi.org>2012-08-30 10:56:36 +0000
committerYana Stamcheva <yana@jitsi.org>2012-08-30 10:56:36 +0000
commit9931f4b8004a35f3d5cdfc2b408723d9201f340a (patch)
tree7de598ad7b54f51fef39a7de5fdaf1e672da4834
parent325cea15eb5769a79aba5003442e1b1f957fa604 (diff)
downloadjitsi-9931f4b8004a35f3d5cdfc2b408723d9201f340a.zip
jitsi-9931f4b8004a35f3d5cdfc2b408723d9201f340a.tar.gz
jitsi-9931f4b8004a35f3d5cdfc2b408723d9201f340a.tar.bz2
Making the contact list component available from outside the gui bundle.
-rw-r--r--src/net/java/sip/communicator/impl/callhistory/CallHistorySourceContact.java10
-rw-r--r--src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/GuiActivator.java3
-rw-r--r--src/net/java/sip/communicator/impl/gui/UIServiceImpl.java11
-rw-r--r--src/net/java/sip/communicator/impl/gui/lookandfeel/ExtendedTreeUI.java49
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/CallTransferHandler.java1
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/ChooseCallAccountPopupMenu.java11
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java3
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/ReceivedCallDialog.java2
-rwxr-xr-xsrc/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chat/ChatTransferHandler.java1
-rwxr-xr-xsrc/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chat/ContactPhotoPanel.java1
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomMemberListPanel.java4
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chat/history/DatesPanel.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chat/toolBars/MainToolBar.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListUI.java4
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/CallHistoryFilter.java14
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ChooseUIContactDetailPopupMenu.java10
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java17
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSourceFilter.java4
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTransferHandler.java1
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java50
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeModel.java6
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ContactNode.java15
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultContactList.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/DefaultTreeContactList.java5
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/GroupNode.java37
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/MetaContactRightButtonMenu.java11
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/MoveSubcontactMessageDialog.java1
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/PresenceFilter.java1
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/SearchField.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/SearchFilter.java32
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/SimpleContactList.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java)7
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java291
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailImpl.java83
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactImpl.java56
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/UIFilterQuery.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQuery.java)16
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/UIGroup.java100
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/UIGroupImpl.java23
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ExternalContactSource.java78
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java73
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIContact.java9
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaUIGroup.java3
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java22
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/SourceUIContact.java21
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java7
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java1
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationGroup.java3
-rw-r--r--src/net/java/sip/communicator/impl/gui/utils/InviteContactTransferHandler.java1
-rw-r--r--src/net/java/sip/communicator/service/contactsource/ContactChangedEvent.java61
-rw-r--r--src/net/java/sip/communicator/service/contactsource/ContactQueryListener.java7
-rw-r--r--src/net/java/sip/communicator/service/contactsource/GenericSourceContact.java10
-rw-r--r--src/net/java/sip/communicator/service/contactsource/SourceContact.java7
-rw-r--r--src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsEvent.java26
-rw-r--r--src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsListener.java20
-rw-r--r--src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsService.java18
-rw-r--r--src/net/java/sip/communicator/service/gui/ContactList.java172
-rw-r--r--src/net/java/sip/communicator/service/gui/ContactListFilter.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListFilter.java)2
-rw-r--r--src/net/java/sip/communicator/service/gui/ContactListNode.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListNode.java)2
-rw-r--r--src/net/java/sip/communicator/service/gui/FilterQuery.java84
-rw-r--r--src/net/java/sip/communicator/service/gui/UIContact.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/UIContact.java)81
-rw-r--r--src/net/java/sip/communicator/service/gui/UIContactDetail.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetail.java)21
-rw-r--r--src/net/java/sip/communicator/service/gui/UIContactDetailAction.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailAction.java)2
-rw-r--r--src/net/java/sip/communicator/service/gui/UIContactSource.java60
-rw-r--r--src/net/java/sip/communicator/service/gui/UIGroup.java137
-rw-r--r--src/net/java/sip/communicator/service/gui/UIService.java7
-rw-r--r--src/net/java/sip/communicator/service/gui/event/ContactListEvent.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListEvent.java)16
-rw-r--r--src/net/java/sip/communicator/service/gui/event/ContactListListener.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListListener.java)20
-rw-r--r--src/net/java/sip/communicator/service/gui/event/FilterQueryListener.java (renamed from src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQueryListener.java)4
-rw-r--r--src/net/java/sip/communicator/service/gui/gui.manifest.mf3
-rw-r--r--src/net/java/sip/communicator/service/protocol/event/ContactPropertyChangeEvent.java6
-rw-r--r--src/net/java/sip/communicator/util/swing/ExtendedTooltip.java (renamed from src/net/java/sip/communicator/impl/gui/utils/ExtendedTooltip.java)3
-rw-r--r--src/net/java/sip/communicator/util/swing/SIPCommScrollPane.java (renamed from src/net/java/sip/communicator/impl/gui/customcontrols/SCScrollPane.java)16
-rw-r--r--src/net/java/sip/communicator/util/swing/plaf/SIPCommTreeUI.java (renamed from src/net/java/sip/communicator/impl/gui/lookandfeel/SIPCommTreeUI.java)22
-rw-r--r--src/net/java/sip/communicator/util/util.manifest.mf1
78 files changed, 1375 insertions, 549 deletions
diff --git a/src/net/java/sip/communicator/impl/callhistory/CallHistorySourceContact.java b/src/net/java/sip/communicator/impl/callhistory/CallHistorySourceContact.java
index 9144727..3fe42c5 100644
--- a/src/net/java/sip/communicator/impl/callhistory/CallHistorySourceContact.java
+++ b/src/net/java/sip/communicator/impl/callhistory/CallHistorySourceContact.java
@@ -349,4 +349,14 @@ public class CallHistorySourceContact
return time;
}
+
+ /**
+ * Returns the status of the source contact. And null if such information
+ * is not available.
+ * @return the PresenceStatus representing the state of this source contact.
+ */
+ public PresenceStatus getPresenceStatus()
+ {
+ return null;
+ }
}
diff --git a/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java b/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java
index 3c38ec1..7188454 100644
--- a/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java
+++ b/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java
@@ -2492,6 +2492,8 @@ public class MetaContactListServiceImpl
(byte[])evt.getNewValue());
}
else if(ContactPropertyChangeEvent.PROPERTY_PERSISTENT_DATA
+ .equals(evt.getPropertyName())
+ || ContactPropertyChangeEvent.PROPERTY_DISPLAY_DETAILS
.equals(evt.getPropertyName()))
{
// if persistent data changed fire an event to store it
diff --git a/src/net/java/sip/communicator/impl/gui/GuiActivator.java b/src/net/java/sip/communicator/impl/gui/GuiActivator.java
index faebc73..026dd4a 100644
--- a/src/net/java/sip/communicator/impl/gui/GuiActivator.java
+++ b/src/net/java/sip/communicator/impl/gui/GuiActivator.java
@@ -689,9 +689,6 @@ public class GuiActivator implements BundleActivator
*/
public static List<ContactSourceService> getContactSources()
{
- if (contactSources != null)
- return contactSources;
-
contactSources = new Vector<ContactSourceService>();
ServiceReference[] serRefs = null;
diff --git a/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java b/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
index c7d1b8c..a7e98d9 100644
--- a/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
+++ b/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
@@ -31,6 +31,7 @@ import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.impl.gui.utils.Constants;
import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.gui.ContactList;
import net.java.sip.communicator.service.gui.Container;
import net.java.sip.communicator.service.gui.event.*;
import net.java.sip.communicator.service.protocol.*;
@@ -1512,4 +1513,14 @@ public class UIServiceImpl
else
throw new IllegalArgumentException("participants");
}
+
+ /**
+ * Creates a contact list component.
+ *
+ * @return the created <tt>ContactList</tt>
+ */
+ public ContactList createContactListComponent()
+ {
+ return new TreeContactList();
+ }
}
diff --git a/src/net/java/sip/communicator/impl/gui/lookandfeel/ExtendedTreeUI.java b/src/net/java/sip/communicator/impl/gui/lookandfeel/ExtendedTreeUI.java
new file mode 100644
index 0000000..8fb3cd3
--- /dev/null
+++ b/src/net/java/sip/communicator/impl/gui/lookandfeel/ExtendedTreeUI.java
@@ -0,0 +1,49 @@
+/*
+ * 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.lookandfeel;
+
+import java.awt.event.*;
+
+import javax.swing.tree.*;
+
+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.gui.*;
+import net.java.sip.communicator.util.swing.plaf.*;
+
+/**
+ * The <tt>ExtendedTreeUI</tt> is an extended implementation of the
+ * <tt>SIPCommTreeUI</tt> specific for the gui implementation.
+ */
+public class ExtendedTreeUI
+ extends SIPCommTreeUI
+{
+ /**
+ * Do not select the <tt>ShowMoreContact</tt>.
+ *
+ * @param path the <tt>TreePath</tt> to select
+ * @param event the <tt>MouseEvent</tt> that provoked the select
+ */
+ protected void selectPathForEvent(TreePath path, MouseEvent event)
+ {
+ Object lastComponent = path.getLastPathComponent();
+
+ // Open right button menu when right mouse is pressed.
+ if (lastComponent instanceof ContactNode)
+ {
+ UIContact uiContact
+ = ((ContactNode) lastComponent).getContactDescriptor();
+
+ if (!(uiContact instanceof ShowMoreContact))
+ {
+ super.selectPathForEvent(path, event);
+ }
+ }
+ else
+ super.selectPathForEvent(path, event);
+ }
+}
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/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/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/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.
diff --git a/src/net/java/sip/communicator/impl/gui/utils/InviteContactTransferHandler.java b/src/net/java/sip/communicator/impl/gui/utils/InviteContactTransferHandler.java
index 5d96bb2..e4be964 100644
--- a/src/net/java/sip/communicator/impl/gui/utils/InviteContactTransferHandler.java
+++ b/src/net/java/sip/communicator/impl/gui/utils/InviteContactTransferHandler.java
@@ -14,6 +14,7 @@ import javax.swing.*;
import net.java.sip.communicator.impl.gui.main.contactlist.*;
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/service/contactsource/ContactChangedEvent.java b/src/net/java/sip/communicator/service/contactsource/ContactChangedEvent.java
new file mode 100644
index 0000000..ae88932
--- /dev/null
+++ b/src/net/java/sip/communicator/service/contactsource/ContactChangedEvent.java
@@ -0,0 +1,61 @@
+/*
+ * 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.service.contactsource;
+
+import java.util.*;
+
+/**
+ * The <tt>ContactChangedEvent</tt> indicates that a
+ * <tt>SourceContact</tt> has been updated as a result of a
+ * <tt>ContactQuery</tt>.
+ * @author Yana Stamcheva
+ */
+public class ContactChangedEvent
+ extends EventObject
+{
+ /**
+ * Serial version UID.
+ */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * The contact that has been updated.
+ */
+ private final SourceContact contact;
+
+ /**
+ * Creates a <tt>ContactChangedEvent</tt> by specifying the contact search
+ * source and the updated <tt>searchContact</tt>.
+ * @param source the source that triggered this event
+ * @param contact the updated contact
+ */
+ public ContactChangedEvent(ContactQuery source,
+ SourceContact contact)
+ {
+ super(source);
+
+ this.contact = contact;
+ }
+
+ /**
+ * Returns the <tt>ContactQuery</tt> that triggered this event.
+ * @return the <tt>ContactQuery</tt> that triggered this event
+ */
+ public ContactQuery getQuerySource()
+ {
+ return (ContactQuery) source;
+ }
+
+ /**
+ * Returns the updated contact.
+ * @return the updated contact
+ */
+ public SourceContact getContact()
+ {
+ return contact;
+ }
+}
diff --git a/src/net/java/sip/communicator/service/contactsource/ContactQueryListener.java b/src/net/java/sip/communicator/service/contactsource/ContactQueryListener.java
index 0610331..37e57c9 100644
--- a/src/net/java/sip/communicator/service/contactsource/ContactQueryListener.java
+++ b/src/net/java/sip/communicator/service/contactsource/ContactQueryListener.java
@@ -35,4 +35,11 @@ public interface ContactQueryListener
* about the received <tt>SourceContact</tt>
*/
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);
}
diff --git a/src/net/java/sip/communicator/service/contactsource/GenericSourceContact.java b/src/net/java/sip/communicator/service/contactsource/GenericSourceContact.java
index ab382ee..4214c16 100644
--- a/src/net/java/sip/communicator/service/contactsource/GenericSourceContact.java
+++ b/src/net/java/sip/communicator/service/contactsource/GenericSourceContact.java
@@ -192,4 +192,14 @@ public class GenericSourceContact
{
this.image = image;
}
+
+ /**
+ * Returns the status of the source contact. And null if such information
+ * is not available.
+ * @return the PresenceStatus representing the state of this source contact.
+ */
+ public PresenceStatus getPresenceStatus()
+ {
+ return null;
+ }
}
diff --git a/src/net/java/sip/communicator/service/contactsource/SourceContact.java b/src/net/java/sip/communicator/service/contactsource/SourceContact.java
index d013d7f..99d9bdb 100644
--- a/src/net/java/sip/communicator/service/contactsource/SourceContact.java
+++ b/src/net/java/sip/communicator/service/contactsource/SourceContact.java
@@ -123,4 +123,11 @@ public interface SourceContact
* specified <tt>key</tt>
*/
public void setData(Object key, Object value);
+
+ /**
+ * Returns the status of the source contact. And null if such information
+ * is not available.
+ * @return the PresenceStatus representing the state of this source contact.
+ */
+ public PresenceStatus getPresenceStatus();
}
diff --git a/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsEvent.java b/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsEvent.java
deleted file mode 100644
index aa7b104..0000000
--- a/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsEvent.java
+++ /dev/null
@@ -1,26 +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.service.customcontactactions;
-
-import java.util.*;
-
-/**
- * An event from custom actions.
- * @author Damian Minkov
- */
-public class CustomContactActionsEvent
- extends EventObject
-{
- /**
- * Creates the event with source.
- * @param source the source of the event.
- */
- public CustomContactActionsEvent(Object source)
- {
- super(source);
- }
-}
diff --git a/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsListener.java b/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsListener.java
deleted file mode 100644
index e87dbad..0000000
--- a/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsListener.java
+++ /dev/null
@@ -1,20 +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.service.customcontactactions;
-
-/**
- * Notifies for events coming from custom actions.
- * @author Damian Minkov
- */
-public interface CustomContactActionsListener
-{
- /**
- * Notifies that object has been updated.
- * @param event the event containing the source which was updated.
- */
- public void updated(CustomContactActionsEvent event);
-}
diff --git a/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsService.java b/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsService.java
index 955ee5c..3aaf0ba 100644
--- a/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsService.java
+++ b/src/net/java/sip/communicator/service/customcontactactions/CustomContactActionsService.java
@@ -29,22 +29,4 @@ public interface CustomContactActionsService<T>
* @return an iterator over a list of <tt>ContactAction</tt>s
*/
public Iterator<ContactAction<T>> getCustomContactActions();
-
- /**
- * Registers a CustomContactActionsListener with this service so that it gets
- * notifications of various events.
- *
- * @param listener the <tt>CustomContactActionsListener</tt> to register.
- */
- public void addCustomContactActionsListener(
- CustomContactActionsListener listener);
-
- /**
- * Unregisters <tt>listener</tt> so that it won't receive any further
- * notifications.
- *
- * @param listener the <tt>CustomContactActionsListener</tt> to unregister.
- */
- public void removeCustomContactActionsListener(
- CustomContactActionsListener listener);
}
diff --git a/src/net/java/sip/communicator/service/gui/ContactList.java b/src/net/java/sip/communicator/service/gui/ContactList.java
new file mode 100644
index 0000000..1a448ba
--- /dev/null
+++ b/src/net/java/sip/communicator/service/gui/ContactList.java
@@ -0,0 +1,172 @@
+/*
+ * 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.service.gui;
+
+import java.awt.*;
+import java.util.*;
+
+import net.java.sip.communicator.service.contactsource.*;
+import net.java.sip.communicator.service.gui.event.*;
+
+/**
+ * The <tt>ContactList</tt> interface represents a contact list. All contact
+ * list components that need to be available as a service could implement
+ * this interface.
+ *
+ * @author Yana Stamcheva
+ */
+public interface ContactList
+{
+ /**
+ * Returns the actual component corresponding to the contact list.
+ *
+ * @return the actual component corresponding to the contact list
+ */
+ public Component getComponent();
+
+ /**
+ * Returns the list of registered contact sources to search in.
+ * @return the list of registered contact sources to search in
+ */
+ public Collection<UIContactSource> getContactSources();
+
+ /**
+ * Returns the <tt>ExternalContactSource</tt> corresponding to the given
+ * <tt>ContactSourceService</tt>.
+ * @param contactSource the <tt>ContactSourceService</tt>, which
+ * corresponding external source implementation we're looking for
+ * @return the <tt>ExternalContactSource</tt> corresponding to the given
+ * <tt>ContactSourceService</tt>
+ */
+ public UIContactSource getContactSource(ContactSourceService contactSource);
+
+ /**
+ * Adds the given group to this list.
+ * @param group the <tt>UIGroup</tt> to add
+ * @param isSorted indicates if the contact should be sorted regarding to
+ * the <tt>GroupNode</tt> policy
+ */
+ public void addGroup(final UIGroup group, final boolean isSorted);
+
+ /**
+ * Removes the given group and its children from the list.
+ * @param group the <tt>UIGroup</tt> to remove
+ */
+ public void removeGroup(final UIGroup group);
+
+ /**
+ * Adds the given <tt>contact</tt> to this list.
+ * @param contact the <tt>UIContact</tt> to add
+ * @param group the <tt>UIGroup</tt> to add to
+ * @param isContactSorted indicates if the contact should be sorted
+ * regarding to the <tt>GroupNode</tt> policy
+ * @param isGroupSorted indicates if the group should be sorted regarding to
+ * the <tt>GroupNode</tt> policy in case it doesn't exist and should be
+ * added
+ */
+ public void addContact( final UIContact contact,
+ final UIGroup group,
+ final boolean isContactSorted,
+ final boolean isGroupSorted);
+
+ /**
+ * Adds the given <tt>contact</tt> to this list.
+ * @param query the <tt>ContactQuery</tt> that adds the given contact
+ * @param contact the <tt>UIContact</tt> to add
+ * @param group the <tt>UIGroup</tt> to add to
+ * @param isSorted indicates if the contact should be sorted regarding to
+ * the <tt>GroupNode</tt> policy
+ */
+ public void addContact(final ContactQuery query,
+ final UIContact contact,
+ final UIGroup group,
+ final boolean isSorted);
+
+ /**
+ * Removes the node corresponding to the given <tt>MetaContact</tt> from
+ * this list.
+ * @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);
+
+ /**
+ * Removes the node corresponding to the given <tt>MetaContact</tt> from
+ * this list.
+ * @param contact the <tt>UIContact</tt> to remove
+ */
+ public void removeContact(UIContact contact);
+
+ /**
+ * Returns the currently applied filter.
+ * @return the currently applied filter
+ */
+ public ContactListFilter getCurrentFilter();
+
+ /**
+ * Applies the given <tt>filter</tt>.
+ * @param filter the <tt>ContactListFilter</tt> to apply.
+ * @return the filter query
+ */
+ public FilterQuery applyFilter(ContactListFilter filter);
+
+ /**
+ * Applies the default filter.
+ * @return the filter query that keeps track of the filtering results
+ */
+ public FilterQuery applyDefaultFilter();
+
+ /**
+ * 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();
+
+ /**
+ * 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();
+
+ /**
+ * Selects the given <tt>UIContact</tt> in the contact list.
+ *
+ * @param uiContact the contact to select
+ */
+ public void setSelectedContact(UIContact uiContact);
+
+ /**
+ * Selects the given <tt>UIGroup</tt> in the contact list.
+ *
+ * @param uiGroup the group to select
+ */
+ public void setSelectedGroup(UIGroup uiGroup);
+
+ /**
+ * Adds a listener for <tt>ContactListEvent</tt>s.
+ *
+ * @param listener the listener to add
+ */
+ public void addContactListListener(ContactListListener listener);
+
+ /**
+ * Removes a listener previously added with <tt>addContactListListener</tt>.
+ *
+ * @param listener the listener to remove
+ */
+ public void removeContactListListener(ContactListListener listener);
+
+ /**
+ * Refreshes the given <tt>UIContact</tt>.
+ *
+ * @param uiContact the contact to refresh
+ */
+ public void refreshContact(UIContact uiContact);
+}
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListFilter.java b/src/net/java/sip/communicator/service/gui/ContactListFilter.java
index 901be8f..328415f 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListFilter.java
+++ b/src/net/java/sip/communicator/service/gui/ContactListFilter.java
@@ -4,7 +4,7 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.main.contactlist;
+package net.java.sip.communicator.service.gui;
/**
* The <tt>ContactListFilter</tt> is an interface meant to be implemented by
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListNode.java b/src/net/java/sip/communicator/service/gui/ContactListNode.java
index eb12943..8d9ddaa 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListNode.java
+++ b/src/net/java/sip/communicator/service/gui/ContactListNode.java
@@ -4,7 +4,7 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.main.contactlist;
+package net.java.sip.communicator.service.gui;
/**
* The <tt>ContactListNode</tt> represents a node in the contact list data
diff --git a/src/net/java/sip/communicator/service/gui/FilterQuery.java b/src/net/java/sip/communicator/service/gui/FilterQuery.java
new file mode 100644
index 0000000..7b2cda9
--- /dev/null
+++ b/src/net/java/sip/communicator/service/gui/FilterQuery.java
@@ -0,0 +1,84 @@
+/*
+ * 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.service.gui;
+
+import net.java.sip.communicator.service.contactsource.*;
+import net.java.sip.communicator.service.gui.event.*;
+
+/**
+ * The <tt>FilterQuery</tt> gives information about a current filtering.
+ *
+ * @author Yana Stamcheva
+ */
+public abstract class FilterQuery
+{
+ /**
+ * A listener, which is notified when this query finishes.
+ */
+ private FilterQueryListener filterQueryListener;
+
+ /**
+ * Adds the given <tt>contactQuery</tt> to the list of filterQueries.
+ * @param contactQuery the <tt>ContactQuery</tt> to add
+ */
+ public abstract void addContactQuery(Object contactQuery);
+
+ /**
+ * Sets the <tt>isSucceeded</tt> property.
+ * @param isSucceeded indicates if this query has succeeded
+ */
+ public abstract void setSucceeded(boolean isSucceeded);
+
+ /**
+ * Indicates if this query has succeeded.
+ * @return <tt>true</tt> if this query has succeeded, <tt>false</tt> -
+ * otherwise
+ */
+ public abstract boolean isSucceeded();
+
+ /**
+ * Indicates if this query is canceled.
+ * @return <tt>true</tt> if this query is canceled, <tt>false</tt> otherwise
+ */
+ public abstract boolean isCanceled();
+
+ /**
+ * Cancels this filter query.
+ */
+ public abstract void cancel();
+
+ /**
+ * Closes this query to indicate that no more contact sub-queries would be
+ * added to it.
+ */
+ public abstract void close();
+
+ /**
+ * Sets the given <tt>FilterQueryListener</tt>.
+ * @param l the <tt>FilterQueryListener</tt> to set
+ */
+ public void setQueryListener(FilterQueryListener l)
+ {
+ filterQueryListener = l;
+ }
+
+ /**
+ * Removes the given query from this filter query, updates the related data
+ * and notifies interested parties if this was the last query to process.
+ * @param query the <tt>ContactQuery</tt> to remove.
+ */
+ public abstract void removeQuery(ContactQuery query);
+
+ /**
+ * Verifies if the given query is contained in this filter query.
+ *
+ * @param query the query we're looking for
+ * @return <tt>true</tt> if the given <tt>query</tt> is contained in this
+ * filter query, <tt>false</tt> - otherwise
+ */
+ public abstract boolean containsQuery(Object query);
+}
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContact.java b/src/net/java/sip/communicator/service/gui/UIContact.java
index 770a2a4..774d65e 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContact.java
+++ b/src/net/java/sip/communicator/service/gui/UIContact.java
@@ -4,13 +4,12 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.main.contactlist;
+package net.java.sip.communicator.service.gui;
+import java.awt.*;
import java.util.*;
+import java.util.List;
-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.*;
@@ -20,21 +19,21 @@ import net.java.sip.communicator.util.swing.*;
*
* @author Yana Stamcheva
*/
-public interface UIContact
+public abstract class UIContact
{
/**
* Returns the descriptor of this contact.
*
* @return the descriptor of this contact
*/
- public Object getDescriptor();
+ public abstract Object getDescriptor();
/**
* Returns the display name of this contact.
*
* @return the display name of this contact
*/
- public String getDisplayName();
+ public abstract String getDisplayName();
/**
* Returns the display details of this contact. These would be shown
@@ -42,33 +41,14 @@ public interface UIContact
*
* @return the display details of this contact
*/
- public String getDisplayDetails();
+ public abstract 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();
+ public abstract int getSourceIndex();
/**
* Creates a tool tip for this contact. If such tooltip is
@@ -76,21 +56,21 @@ public interface UIContact
*
* @return the tool tip for this contact descriptor
*/
- public ExtendedTooltip getToolTip();
+ public abstract ExtendedTooltip getToolTip();
/**
* Returns the right button menu component.
*
* @return the right button menu component
*/
- public JPopupMenu getRightButtonMenu();
+ public abstract Component getRightButtonMenu();
/**
* Returns the parent group.
*
* @return the parent group
*/
- public UIGroup getParentGroup();
+ public abstract UIGroup getParentGroup();
/**
* Sets the given <tt>UIGroup</tt> to be the parent group of this
@@ -98,7 +78,7 @@ public interface UIContact
*
* @param parentGroup the parent <tt>UIGroup</tt> of this contact
*/
- public void setParentGroup(UIGroup parentGroup);
+ public abstract void setParentGroup(UIGroup parentGroup);
/**
* Returns an <tt>Iterator</tt> over a list of the search strings of this
@@ -107,24 +87,7 @@ public interface UIContact
* @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);
+ public abstract Iterator<String> getSearchStrings();
/**
* Returns the default <tt>ContactDetail</tt> to use for any operations
@@ -134,7 +97,7 @@ public interface UIContact
* @return the default <tt>ContactDetail</tt> to use for any operations
* depending to the given <tt>OperationSet</tt> class
*/
- public UIContactDetail getDefaultContactDetail(
+ public abstract UIContactDetail getDefaultContactDetail(
Class<? extends OperationSet> opSetClass);
/**
@@ -145,7 +108,7 @@ public interface UIContact
* @return a list of all <tt>UIContactDetail</tt>s corresponding to the
* given <tt>OperationSet</tt> class
*/
- public List<UIContactDetail> getContactDetailsForOperationSet(
+ public abstract List<UIContactDetail> getContactDetailsForOperationSet(
Class<? extends OperationSet> opSetClass);
/**
@@ -155,12 +118,22 @@ public interface UIContact
* @return a list of all <tt>UIContactDetail</tt>s within this
* <tt>UIContact</tt>
*/
- public List<UIContactDetail> getContactDetails();
+ public abstract 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();
+ public abstract Collection<SIPCommButton> getContactCustomActionButtons();
+
+ /**
+ * Returns the preferred height of this group in the contact list.
+ *
+ * @return the preferred height of this group in the contact list
+ */
+ public int getPreferredHeight()
+ {
+ return -1;
+ }
}
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetail.java b/src/net/java/sip/communicator/service/gui/UIContactDetail.java
index 3790f68..88f8a8e 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetail.java
+++ b/src/net/java/sip/communicator/service/gui/UIContactDetail.java
@@ -4,12 +4,10 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.main.contactlist;
+package net.java.sip.communicator.service.gui;
import java.util.*;
-import javax.swing.*;
-
import net.java.sip.communicator.service.protocol.*;
/**
@@ -37,11 +35,6 @@ public abstract class UIContactDetail
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;
@@ -85,7 +78,6 @@ public abstract class UIContactDetail
String displayName,
String category,
Collection<String> labels,
- ImageIcon statusIcon,
ProtocolProviderService preferredProvider,
String preferredProtocol,
Object descriptor)
@@ -94,7 +86,6 @@ public abstract class UIContactDetail
this.displayName = displayName;
this.category = category;
this.labels = labels;
- this.statusIcon = statusIcon;
this.protocolProvider = preferredProvider;
this.preferredProtocol = preferredProtocol;
this.descriptor = descriptor;
@@ -147,16 +138,6 @@ public abstract class UIContactDetail
}
/**
- * 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
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailAction.java b/src/net/java/sip/communicator/service/gui/UIContactDetailAction.java
index fb20936..1286ee0 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIContactDetailAction.java
+++ b/src/net/java/sip/communicator/service/gui/UIContactDetailAction.java
@@ -4,7 +4,7 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.main.contactlist;
+package net.java.sip.communicator.service.gui;
/**
* Defines an action for an <tt>UIContactDetail</tt>.
diff --git a/src/net/java/sip/communicator/service/gui/UIContactSource.java b/src/net/java/sip/communicator/service/gui/UIContactSource.java
new file mode 100644
index 0000000..f2b6028
--- /dev/null
+++ b/src/net/java/sip/communicator/service/gui/UIContactSource.java
@@ -0,0 +1,60 @@
+/*
+ * 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.service.gui;
+
+import net.java.sip.communicator.service.contactsource.*;
+
+/**
+ * The user interface representation of a contact source.
+ *
+ * @author Yana Stamcheva
+ */
+public interface UIContactSource
+{
+ /**
+ * Returns the UI group for this contact source. There's only one group
+ * descriptor per external source.
+ *
+ * @return the group descriptor
+ */
+ public UIGroup getUIGroup();
+
+ /**
+ * Returns the <tt>UIContact</tt> corresponding to the given
+ * <tt>sourceContact</tt>.
+ *
+ * @param sourceContact the <tt>SourceContact</tt>, for which we search a
+ * corresponding <tt>UIContact</tt>
+ * @return the <tt>UIContact</tt> corresponding to the given
+ * <tt>sourceContact</tt>
+ */
+ public UIContact createUIContact(SourceContact sourceContact);
+
+ /**
+ * Removes the <tt>UIContact</tt> from the given <tt>sourceContact</tt>.
+ * @param sourceContact the <tt>SourceContact</tt>, which corresponding UI
+ * contact we would like to remove
+ */
+ public void removeUIContact(SourceContact sourceContact);
+
+ /**
+ * Returns the <tt>UIContact</tt> corresponding to the given
+ * <tt>SourceContact</tt>.
+ * @param sourceContact the <tt>SourceContact</tt>, which corresponding UI
+ * contact we're looking for
+ * @return the <tt>UIContact</tt> corresponding to the given
+ * <tt>MetaContact</tt>
+ */
+ public UIContact getUIContact(SourceContact sourceContact);
+
+ /**
+ * Returns the corresponding <tt>ContactSourceService</tt>.
+ *
+ * @return the corresponding <tt>ContactSourceService</tt>
+ */
+ public ContactSourceService getContactSourceService();
+}
diff --git a/src/net/java/sip/communicator/service/gui/UIGroup.java b/src/net/java/sip/communicator/service/gui/UIGroup.java
new file mode 100644
index 0000000..9bdfa07
--- /dev/null
+++ b/src/net/java/sip/communicator/service/gui/UIGroup.java
@@ -0,0 +1,137 @@
+/*
+ * 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.service.gui;
+
+import java.awt.*;
+
+/**
+ * The <tt>UIGroup</tt> represents the user interface contact list group.
+ *
+ * @author Yana Stamcheva
+ */
+public abstract class UIGroup
+{
+ /**
+ * The preferred height of this group in the contact list.
+ */
+ private int preferredGroupHeight = -1;
+
+ /**
+ * The display details of this group.
+ */
+ private String displayDetails = "";
+
+ /**
+ * 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 abstract 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 abstract String getDisplayName();
+
+ /**
+ * Returns the display details of this contact. These would be shown
+ * whenever the contact is selected. The display details aren't obligatory,
+ * so we return an empty string.
+ *
+ * @return the display details of this contact
+ */
+ public String getDisplayDetails()
+ {
+ return displayDetails;
+ }
+
+ /**
+ * Sets the display details of this group.
+ *
+ * @return the display details of this group
+ */
+ public void setDisplayDetails(String displayDetails)
+ {
+ this.displayDetails = displayDetails;
+ }
+
+ /**
+ * 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 abstract int getSourceIndex();
+
+ /**
+ * Returns the parent group.
+ *
+ * @return the parent group
+ */
+ public abstract 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 abstract boolean isGroupCollapsed();
+
+ /**
+ * Returns the count of online child contacts.
+ *
+ * @return the count of online child contacts
+ */
+ public abstract int countOnlineChildContacts();
+
+ /**
+ * Returns the child contacts count.
+ *
+ * @return child contacts count
+ */
+ public abstract int countChildContacts();
+
+ /**
+ * Returns the identifier of this group.
+ *
+ * @return the identifier of this group
+ */
+ public abstract String getId();
+
+ /**
+ * Returns the right button menu for this group.
+ *
+ * @return the right button menu component for this group
+ */
+ public abstract Component getRightButtonMenu();
+
+ /**
+ * Returns the preferred height of this group in the contact list.
+ *
+ * @return the preferred height of this group in the contact list
+ */
+ public int getPreferredHeight()
+ {
+ return preferredGroupHeight;
+ }
+
+ /**
+ * Sets the preferred height of this group in the contact list.
+ *
+ * @param preferredHeight the preferred height of this group in the contact
+ * list
+ */
+ public void setPreferredHeight(int preferredHeight)
+ {
+ this.preferredGroupHeight = preferredHeight;
+ }
+}
diff --git a/src/net/java/sip/communicator/service/gui/UIService.java b/src/net/java/sip/communicator/service/gui/UIService.java
index 45f4dfd..add11c0 100644
--- a/src/net/java/sip/communicator/service/gui/UIService.java
+++ b/src/net/java/sip/communicator/service/gui/UIService.java
@@ -455,4 +455,11 @@ public interface UIService
* participants to be included into the newly created <tt>Chat</tt>
*/
public void startChat(String[] participants);
+
+ /**
+ * Creates a contact list component.
+ *
+ * @return the created <tt>ContactList</tt>
+ */
+ public ContactList createContactListComponent();
}
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListEvent.java b/src/net/java/sip/communicator/service/gui/event/ContactListEvent.java
index 8a8a9af..623788c 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListEvent.java
+++ b/src/net/java/sip/communicator/service/gui/event/ContactListEvent.java
@@ -4,10 +4,12 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.main.contactlist;
+package net.java.sip.communicator.service.gui.event;
import java.util.*;
+import net.java.sip.communicator.service.gui.*;
+
/**
* The <tt>ContactListEvent</tt> is triggered when a contact or a group is
* clicked in the contact list.
@@ -31,6 +33,18 @@ public class ContactListEvent
public static final int GROUP_CLICKED = 2;
/**
+ * Indicates that the ContactListEvent instance was triggered by
+ * selecting a contact in the contact list.
+ */
+ public static final int CONTACT_SELECTED = 3;
+
+ /**
+ * Indicates that the ContactListEvent instance was triggered by selecting
+ * a group in the contact list.
+ */
+ public static final int GROUP_SELECTED = 4;
+
+ /**
* Indicated the number of click accompanying the event
*/
private int clickCount;
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListListener.java b/src/net/java/sip/communicator/service/gui/event/ContactListListener.java
index e6f31e0..f6fa602 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListListener.java
+++ b/src/net/java/sip/communicator/service/gui/event/ContactListListener.java
@@ -4,7 +4,7 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.main.contactlist;
+package net.java.sip.communicator.service.gui.event;
import java.util.*;
@@ -18,15 +18,33 @@ 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 group has been selected.
+ *
+ * @param evt the <tt>ContactListEvent</tt> that has been triggered from
+ * the user selection
+ */
+ public void groupSelected(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);
+
+ /**
+ * Indicates that a contact has been selected.
+ *
+ * @param evt the <tt>ContactListEvent</tt> that has been triggered from
+ * the user selection
+ */
+ public void contactSelected(ContactListEvent evt);
}
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQueryListener.java b/src/net/java/sip/communicator/service/gui/event/FilterQueryListener.java
index cd4eaa3..1f7747f 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/FilterQueryListener.java
+++ b/src/net/java/sip/communicator/service/gui/event/FilterQueryListener.java
@@ -4,7 +4,9 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.main.contactlist;
+package net.java.sip.communicator.service.gui.event;
+
+import net.java.sip.communicator.service.gui.*;
/**
* The <tt>FilterQueryListener</tt> is notified when a filter query finishes.
diff --git a/src/net/java/sip/communicator/service/gui/gui.manifest.mf b/src/net/java/sip/communicator/service/gui/gui.manifest.mf
index ea63780..0708371 100644
--- a/src/net/java/sip/communicator/service/gui/gui.manifest.mf
+++ b/src/net/java/sip/communicator/service/gui/gui.manifest.mf
@@ -5,7 +5,8 @@ Bundle-Vendor: jitsi.org
Bundle-Version: 0.0.1
System-Bundle: yes
Import-Package: org.osgi.framework,
- org.jitsi.service.resources, net.java.sip.communicator.service.resources,
+ org.jitsi.service.resources,
+ net.java.sip.communicator.service.resources,
net.java.sip.communicator.util
Export-Package: net.java.sip.communicator.service.gui,
net.java.sip.communicator.service.gui.event,
diff --git a/src/net/java/sip/communicator/service/protocol/event/ContactPropertyChangeEvent.java b/src/net/java/sip/communicator/service/protocol/event/ContactPropertyChangeEvent.java
index 6f324bc..f69caeb 100644
--- a/src/net/java/sip/communicator/service/protocol/event/ContactPropertyChangeEvent.java
+++ b/src/net/java/sip/communicator/service/protocol/event/ContactPropertyChangeEvent.java
@@ -36,6 +36,12 @@ public class ContactPropertyChangeEvent
public static final String PROPERTY_PERSISTENT_DATA = "PersistentData";
/**
+ * Indicates that a change has occurred in the display details of the source
+ * contact.
+ */
+ public static final String PROPERTY_DISPLAY_DETAILS = "DisplayDetails";
+
+ /**
* Creates a ContactPropertyChangeEvent indicating that a change has
* occurred for property <tt>propertyName</tt> in the <tt>source</tt>
* contact and that its value has changed from <tt>oldValue</tt> to
diff --git a/src/net/java/sip/communicator/impl/gui/utils/ExtendedTooltip.java b/src/net/java/sip/communicator/util/swing/ExtendedTooltip.java
index 750806b..2c24646 100644
--- a/src/net/java/sip/communicator/impl/gui/utils/ExtendedTooltip.java
+++ b/src/net/java/sip/communicator/util/swing/ExtendedTooltip.java
@@ -4,7 +4,7 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.utils;
+package net.java.sip.communicator.util.swing;
import java.awt.*;
import java.awt.event.*;
@@ -14,7 +14,6 @@ import javax.swing.plaf.*;
import javax.swing.plaf.metal.*;
import net.java.sip.communicator.util.*;
-import net.java.sip.communicator.util.swing.*;
/**
* The tooltip shown over a contact in the contact list.
diff --git a/src/net/java/sip/communicator/impl/gui/customcontrols/SCScrollPane.java b/src/net/java/sip/communicator/util/swing/SIPCommScrollPane.java
index d56dab5..84b73f8 100644
--- a/src/net/java/sip/communicator/impl/gui/customcontrols/SCScrollPane.java
+++ b/src/net/java/sip/communicator/util/swing/SIPCommScrollPane.java
@@ -4,7 +4,7 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.customcontrols;
+package net.java.sip.communicator.util.swing;
import java.awt.*;
import java.awt.image.*;
@@ -13,10 +13,8 @@ import java.lang.reflect.*;
import javax.swing.*;
-import net.java.sip.communicator.impl.gui.*;
-import net.java.sip.communicator.impl.gui.utils.*;
+import net.java.sip.communicator.util.*;
import net.java.sip.communicator.util.skin.*;
-import net.java.sip.communicator.util.swing.*;
import org.jitsi.util.*;
@@ -29,7 +27,7 @@ import org.jitsi.util.*;
* @author Yana Stamcheva
* @author Adam Netocny
*/
-public class SCScrollPane
+public class SIPCommScrollPane
extends JScrollPane
implements Skinnable
{
@@ -38,7 +36,7 @@ public class SCScrollPane
/**
* Creates an <tt>SCSCrollPane</tt>.
*/
- public SCScrollPane()
+ public SIPCommScrollPane()
{
this.setBorder(BorderFactory.createMatteBorder(
1, 0, 1, 0, Color.GRAY));
@@ -110,7 +108,7 @@ public class SCScrollPane
{
return
Boolean.parseBoolean(
- GuiActivator.getResources().getSettingsString(key));
+ UtilActivator.getResources().getSettingsString(key));
}
/**
@@ -166,7 +164,7 @@ public class SCScrollPane
if(getSettingsBoolean("impl.gui.IS_CONTACT_LIST_IMG_BG_ENABLED"))
{
bgImage =
- ImageLoader.getImage(ImageLoader.MAIN_WINDOW_BACKGROUND);
+ UtilActivator.getImage("service.gui.MAIN_WINDOW_BACKGROUND");
if (getSettingsBoolean(
"impl.gui.IS_CONTACT_LIST_TEXTURE_BG_ENABLED")
@@ -182,7 +180,7 @@ public class SCScrollPane
{
texture = null;
color =
- new Color(GuiActivator.getResources().getColor(
+ new Color(UtilActivator.getResources().getColor(
"service.gui.CONTACT_LIST_BACKGROUND"));
}
}
diff --git a/src/net/java/sip/communicator/impl/gui/lookandfeel/SIPCommTreeUI.java b/src/net/java/sip/communicator/util/swing/plaf/SIPCommTreeUI.java
index f67dc0c..7aff92f 100644
--- a/src/net/java/sip/communicator/impl/gui/lookandfeel/SIPCommTreeUI.java
+++ b/src/net/java/sip/communicator/util/swing/plaf/SIPCommTreeUI.java
@@ -4,9 +4,10 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-package net.java.sip.communicator.impl.gui.lookandfeel;
+package net.java.sip.communicator.util.swing.plaf;
import java.awt.*;
+import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;
@@ -15,9 +16,6 @@ import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
import javax.swing.tree.*;
-import net.java.sip.communicator.impl.gui.main.contactlist.*;
-import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*;
-
/**
* SIPCommTreeUI implementation.
*
@@ -188,21 +186,7 @@ public class SIPCommTreeUI
*/
protected void selectPathForEvent(TreePath path, MouseEvent event)
{
- Object lastComponent = path.getLastPathComponent();
-
- // Open right button menu when right mouse is pressed.
- if (lastComponent instanceof ContactNode)
- {
- UIContact uiContact
- = ((ContactNode) lastComponent).getContactDescriptor();
-
- if (!(uiContact instanceof ShowMoreContact))
- {
- super.selectPathForEvent(path, event);
- }
- }
- else
- super.selectPathForEvent(path, event);
+ super.selectPathForEvent(path, event);
}
/**
diff --git a/src/net/java/sip/communicator/util/util.manifest.mf b/src/net/java/sip/communicator/util/util.manifest.mf
index 8f2c502..004bc74 100644
--- a/src/net/java/sip/communicator/util/util.manifest.mf
+++ b/src/net/java/sip/communicator/util/util.manifest.mf
@@ -20,6 +20,7 @@ Import-Package: com.sun.awt,
javax.swing.text,
javax.swing.text.html,
javax.swing.text.html.parser,
+ javax.swing.tree,
javax.xml.parsers,
javax.xml.transform,
javax.xml.transform.dom,