diff --git a/src/net/java/sip/communicator/impl/gui/main/MainFrame.java b/src/net/java/sip/communicator/impl/gui/main/MainFrame.java index 44e61c198..880df22fb 100755 --- a/src/net/java/sip/communicator/impl/gui/main/MainFrame.java +++ b/src/net/java/sip/communicator/impl/gui/main/MainFrame.java @@ -518,7 +518,8 @@ public void contactPresenceStatusChanged( if (metaContact != null) { ContactListPanel clistPanel = tabbedPane.getContactListPanel(); - clistPanel.getContactList().repaint(); + clistPanel.getContactList().refresh(); + if(!evt.getOldStatus().equals(evt.getNewStatus())) clistPanel.updateChatContactStatus( metaContact, sourceContact); diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java index 67dc1359a..e2297e652 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java @@ -50,7 +50,7 @@ public class ContactList extends JList /** * Creates an instance of the ContactList. * - * @param contactList The related meta contactlist. + * @param mainFrame The main application window. */ public ContactList(MainFrame mainFrame) { @@ -90,7 +90,7 @@ public void valueChanged(ListSelectionEvent e) { * Refreshes the list model. */ public void metaContactAdded(MetaContactEvent evt) { - this.repaint(); + this.refresh(); } /** @@ -98,7 +98,7 @@ public void metaContactAdded(MetaContactEvent evt) { * Refreshes the list when a meta contact is renamed. */ public void metaContactRenamed(MetaContactRenamedEvent evt) { - this.repaint(); + this.refresh(); } /** @@ -108,7 +108,7 @@ public void metaContactRenamed(MetaContactRenamedEvent evt) { public void protoContactAdded(ProtoContactEvent evt) { int index = this.listModel.indexOf(evt.getNewParent()); - this.listModel.contentChanged(index, index); + this.listModel.contentChanged(index, index); } /** @@ -116,7 +116,7 @@ public void protoContactAdded(ProtoContactEvent evt) { * Refreshes the list when a protocol contact has been removed. */ public void protoContactRemoved(ProtoContactEvent evt) { - this.repaint(); + this.refresh(); } /** @@ -124,7 +124,7 @@ public void protoContactRemoved(ProtoContactEvent evt) { * Refreshes the list when a protocol contact has been moved. */ public void protoContactMoved(ProtoContactEvent evt) { - this.repaint(); + this.refresh(); } /** @@ -132,7 +132,7 @@ public void protoContactMoved(ProtoContactEvent evt) { * Refreshes the list when a meta contact has been removed. */ public void metaContactRemoved(MetaContactEvent evt) { - this.repaint(); + this.refresh(); } /** @@ -140,15 +140,15 @@ public void metaContactRemoved(MetaContactEvent evt) { * Refreshes the list when a meta contact has been moved. */ public void metaContactMoved(MetaContactMovedEvent evt) { - this.repaint(); + this.refresh(); } /** * Handles the MetaContactGroupEvent. * Refreshes the list model when a new meta contact group has been added. */ - public void metaContactGroupAdded(MetaContactGroupEvent evt) { - this.repaint(); + public void metaContactGroupAdded(MetaContactGroupEvent evt) { + this.refresh(); //this.ensureIndexIsVisible(0); } @@ -157,7 +157,7 @@ public void metaContactGroupAdded(MetaContactGroupEvent evt) { * Refreshes the list when a meta contact group has been modified. */ public void metaContactGroupModified(MetaContactGroupEvent evt) { - this.repaint(); + this.refresh(); } /** @@ -165,7 +165,7 @@ public void metaContactGroupModified(MetaContactGroupEvent evt) { * Refreshes the list when a meta contact group has been removed. */ public void metaContactGroupRemoved(MetaContactGroupEvent evt) { - this.repaint(); + this.refresh(); } /** @@ -176,7 +176,7 @@ public void metaContactGroupRemoved(MetaContactGroupEvent evt) { * depends on the contact and not on the index. */ public void childContactsReordered(MetaContactGroupEvent evt) { - this.repaint(); + this.refresh(); if (currentlySelectedContact != null) this.setSelectedValue(currentlySelectedContact, false); } @@ -571,61 +571,7 @@ public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) - { - /* SET A TOOLTIP - NEED TO BE FIXED - int index = this.locationToIndex(e.getPoint()); - Object value = this.listModel.getElementAt(index); - - ContactListCellRenderer renderer - = (ContactListCellRenderer) - this.getCellRenderer().getListCellRendererComponent( - this, value, index, true, - true); - - Point selectedCellPoint = this.indexToLocation(index); - - int translatedX = e.getX() - selectedCellPoint.x; - - int translatedY = e.getY() - selectedCellPoint.y; - - if (value instanceof MetaContact) { - - //get the component under the mouse - Component component = this.getInnerComponent(renderer, translatedX); - - if (component instanceof JPanel) { - if(component.getName() != null - && component.getName().equals("buttonsPanel")){ - - JPanel panel = (JPanel) component; - - int internalX = translatedX - - (renderer.getWidth() - panel.getWidth() - 2); - - int internalY = translatedY - - (renderer.getHeight() - panel.getHeight()); - - Component c = this.getInnerComponent(panel, internalX); - - if (c instanceof ContactProtocolButton) { - - ContactProtocolButton button - = (ContactProtocolButton)c; - - Point p = e.getPoint(); - SwingUtilities - .convertPointToScreen(p, this); - - if(button.isToolTipShown()) - button.hideToolTip(); - else - button.showToolTip(p.x, p.y); - } - } - } - } - */ - } + {} /** * Returns the component positioned at the given x in the given container. @@ -682,4 +628,14 @@ public void run() { } } + /** + * Refreshes the contact list. Should be invoked after any change in the + * contact list. + */ + public void refresh() + { + this.revalidate(); + this.repaint(); + } + } diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListModel.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListModel.java index 93ea1ee57..4876253b0 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListModel.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListModel.java @@ -106,8 +106,7 @@ public int getSize() { * @return The object at the given index. */ public Object getElementAt(int index) { - Object element = this.getElementAt(this.rootGroup, -1, index); - return element; + return this.getElementAt(this.rootGroup, -1, index); } /** @@ -140,7 +139,7 @@ private int getContactListSize(MetaContactGroup group) { while (subgroups.hasNext()) { size += getContactListSize((MetaContactGroup) subgroups.next()); } - } + } return size; } @@ -307,24 +306,31 @@ public int countDirectChildContacts(MetaContactGroup parentGroup) { } /** - * Recursively searches all groups for the element at the given index. + * Recursively searches the given group in depth for the element at the + * given index. * - * @param group The group in which we search. - * @param searchedIndex The index to search for. - * @return The element at the given index, if it finds it, otherwise null. + * @param group the group in which we search + * @param currentIndex the index, where we currently are + * @param searchedIndex the index to search for + * @return The element at the given index, if we find it, otherwise null. */ private Object getElementAt(MetaContactGroup group, int currentIndex, int searchedIndex) { Object element = null; if(currentIndex == searchedIndex) { + //the current index is the index of the group so if this is the + //searched index we return the group element = group; } else { + //if the group is closed don't count its children if(!isGroupClosed(group)) { int childCount = countChildContacts(group); if(searchedIndex <= (currentIndex + childCount)) { - + //if the searched index is lower than or equal to + //the greater child index in this group then our element is + //here MetaContact contact = group.getMetaContact( searchedIndex - currentIndex - 1); @@ -332,6 +338,7 @@ private Object getElementAt(MetaContactGroup group, element = contact; } else { + //if we haven't found the contact we search the subgroups currentIndex += childCount; Iterator subgroups = group.getSubgroups(); @@ -344,6 +351,8 @@ private Object getElementAt(MetaContactGroup group, if(element != null) break; else { + //if we haven't found the element on this iteration + //we update the current index and we continue if(!isGroupClosed(subgroup)) currentIndex += countChildContacts(subgroup) + 1; @@ -353,7 +362,7 @@ private Object getElementAt(MetaContactGroup group, } } } - } + } return element; } @@ -436,9 +445,9 @@ public boolean isContactOnline(MetaContact contact) } /** - * - * @param group - * @return + * Counts group child contacts depending on the showOffline option. + * @param group the parent group to count for + * @return child contacts count for the given group */ public int countChildContacts(MetaContactGroup group) {