diff --git a/src/net/java/sip/communicator/impl/gui/main/StatusPanel.java b/src/net/java/sip/communicator/impl/gui/main/StatusPanel.java
index ea45aa1c8..091189c2d 100644
--- a/src/net/java/sip/communicator/impl/gui/main/StatusPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/StatusPanel.java
@@ -51,11 +51,11 @@ public StatusPanel(MainFrame mainFrame) {
* @param protocolProvider The protocol provider.
*/
public void addAccount(ProtocolProviderService protocolProvider) {
-
StatusSelectorBox protocolStatusCombo = new StatusSelectorBox(
- this.mainFrame, protocolProvider);
+ this.mainFrame, protocolProvider,
+ this.mainFrame.getProviderIndex(protocolProvider));
- this.protocolStatusCombos.put(protocolProvider.getAccountID(),
+ this.protocolStatusCombos.put(protocolProvider,
protocolStatusCombo);
this.add(protocolStatusCombo);
@@ -67,20 +67,37 @@ public void addAccount(ProtocolProviderService protocolProvider) {
* Removes the selector box, containing all protocol statuses, from
* the StatusPanel and refreshes the panel.
*
- * @param accountID The identifier of the account to remove.
+ * @param pps The protocol provider to remove.
*/
- public void removeAccount(AccountID accountID) {
+ public void removeAccount(ProtocolProviderService pps) {
StatusSelectorBox protocolStatusCombo = (StatusSelectorBox)
- this.protocolStatusCombos.get(accountID);
+ this.protocolStatusCombos.get(pps);
- this.protocolStatusCombos.remove(accountID);
+ this.protocolStatusCombos.remove(pps);
this.remove(protocolStatusCombo);
this.revalidate();
this.repaint();
}
+ /**
+ * Updates the account given by the protocol provider.
+ *
+ * @param protocolProvider the protocol provider for the account to update
+ */
+ public void updateAccount(ProtocolProviderService protocolProvider) {
+ StatusSelectorBox protocolStatusCombo = (StatusSelectorBox)
+ this.protocolStatusCombos.get(protocolProvider);
+
+ protocolStatusCombo.setAccountIndex(
+ mainFrame.getProviderIndex(protocolProvider));
+
+ this.revalidate();
+ this.repaint();
+ }
+
+
/**
* Shows the protocol animated icon, which indicates that it is in a
* connecting state.
@@ -91,7 +108,7 @@ public void startConnecting(ProtocolProviderService protocolProvider) {
StatusSelectorBox selectorBox
= (StatusSelectorBox) protocolStatusCombos
- .get(protocolProvider.getAccountID());
+ .get(protocolProvider);
selectorBox.startConnecting(Constants
.getProtocolAnimatedIcon(protocolProvider.getProtocolName()));
@@ -109,76 +126,78 @@ public void updateStatus(ProtocolProviderService protocolProvider) {
StatusSelectorBox selectorBox
= (StatusSelectorBox) protocolStatusCombos
- .get(protocolProvider.getAccountID());
-
- if(!protocolProvider.isRegistered())
- selectorBox.updateStatus(selectorBox.getOfflineStatus());
- else {
- if(selectorBox.getLastSelectedStatus() != null) {
- selectorBox.updateStatus(selectorBox.getLastSelectedStatus());
- }
- else {
- ConfigurationService configService
- = GuiActivator.getConfigurationService();
-
- //find the last contact status saved in the configuration.
- String lastStatus = null;
-
- Iterator i = mainFrame.getProtocolPresence(protocolProvider)
- .getSupportedStatusSet();
-
- String prefix = "net.java.sip.communicator.impl.ui.accounts";
-
- List accounts = configService
- .getPropertyNamesByPrefix(prefix, true);
-
- Iterator accountsIter = accounts.iterator();
-
- while(accountsIter.hasNext()) {
- String accountRootPropName
- = (String) accountsIter.next();
+ .get(protocolProvider);
+
+ if(selectorBox != null) {
+ if(!protocolProvider.isRegistered())
+ selectorBox.updateStatus(selectorBox.getOfflineStatus());
+ else {
+ if(selectorBox.getLastSelectedStatus() != null) {
+ selectorBox.updateStatus(selectorBox.getLastSelectedStatus());
+ }
+ else {
+ ConfigurationService configService
+ = GuiActivator.getConfigurationService();
+
+ //find the last contact status saved in the configuration.
+ String lastStatus = null;
+
+ Iterator i = mainFrame.getProtocolPresence(protocolProvider)
+ .getSupportedStatusSet();
- String accountUID
- = configService.getString(accountRootPropName);
+ String prefix = "net.java.sip.communicator.impl.ui.accounts";
- if(accountUID.equals(protocolProvider
- .getAccountID().getAccountUniqueID())) {
- lastStatus = configService.getString(
- accountRootPropName + ".lastAccountStatus");
+ List accounts = configService
+ .getPropertyNamesByPrefix(prefix, true);
+
+ Iterator accountsIter = accounts.iterator();
+
+ while(accountsIter.hasNext()) {
+ String accountRootPropName
+ = (String) accountsIter.next();
+
+ String accountUID
+ = configService.getString(accountRootPropName);
- if(lastStatus != null)
- break;
+ if(accountUID.equals(protocolProvider
+ .getAccountID().getAccountUniqueID())) {
+ lastStatus = configService.getString(
+ accountRootPropName + ".lastAccountStatus");
+
+ if(lastStatus != null)
+ break;
+ }
}
- }
-
- if(lastStatus == null) {
- selectorBox.updateStatus(selectorBox.getOnlineStatus());
- }
- else {
- PresenceStatus status;
- while(i.hasNext()) {
- status = (PresenceStatus)i.next();
- if(status.getStatusName().equals(lastStatus)) {
- selectorBox.updateStatus(status);
- break;
- }
+
+ if(lastStatus == null) {
+ selectorBox.updateStatus(selectorBox.getOnlineStatus());
+ }
+ else {
+ PresenceStatus status;
+ while(i.hasNext()) {
+ status = (PresenceStatus)i.next();
+ if(status.getStatusName().equals(lastStatus)) {
+ selectorBox.updateStatus(status);
+ break;
+ }
+ }
}
}
}
+ selectorBox.repaint();
}
- selectorBox.repaint();
}
/**
* Checks if the given protocol has already its StatusSelectorBox
* in the StatusPanel.
*
- * @param accountID The identifier of the account.
+ * @param pps The protocol provider to check.
* @return True if the protcol has already its StatusSelectorBox in the
* StatusPanel, False otherwise.
*/
- public boolean containsAccount(AccountID accountID) {
- if (protocolStatusCombos.containsKey(accountID))
+ public boolean containsAccount(ProtocolProviderService pps) {
+ if (protocolStatusCombos.containsKey(pps))
return true;
else
return false;
diff --git a/src/net/java/sip/communicator/impl/gui/main/StatusSelectorBox.java b/src/net/java/sip/communicator/impl/gui/main/StatusSelectorBox.java
index 9e1ad750b..31bf0c2c4 100644
--- a/src/net/java/sip/communicator/impl/gui/main/StatusSelectorBox.java
+++ b/src/net/java/sip/communicator/impl/gui/main/StatusSelectorBox.java
@@ -7,11 +7,11 @@
package net.java.sip.communicator.impl.gui.main;
-import java.util.*;
-
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
+import java.util.*;
+
import javax.swing.*;
import javax.swing.Timer;
@@ -19,7 +19,6 @@
import net.java.sip.communicator.impl.gui.i18n.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.service.protocol.icqconstants.*;
import net.java.sip.communicator.util.*;
/**
@@ -49,19 +48,25 @@ public class StatusSelectorBox extends SIPCommSelectorBox {
private PresenceStatus lastSelectedStatus;
+ private int accountIndex;
+
/**
* Creates an instance of StatusSelectorBox and initializes
* the selector box with data.
*
* @param mainFrame The main application window.
* @param protocolProvider The protocol provider.
+ * @param accountIndex If we have more than one account for a protocol,
+ * each account has an index.
*/
public StatusSelectorBox(MainFrame mainFrame,
- ProtocolProviderService protocolProvider) {
+ ProtocolProviderService protocolProvider,
+ int accountIndex) {
this.mainFrame = mainFrame;
this.protocolProvider = protocolProvider;
-
+ this.accountIndex = accountIndex;
+
this.statusIterator = this.mainFrame
.getProtocolPresence(protocolProvider).getSupportedStatusSet();
@@ -121,8 +126,7 @@ public void actionPerformed(ActionEvent e) {
.setManuallyDisconnected(true);
protocolProvider.unregister();
}
- setSelected(menuItem.getText(),
- menuItem.getIcon());
+ setSelectedStatus(status);
}
else {
lastSelectedStatus = status;
@@ -305,9 +309,10 @@ public void actionPerformed(ActionEvent evt) {
*/
public void setSelectedStatus(PresenceStatus status)
{
+ Image statusImage = ImageLoader.getBytesInImage(status.getStatusIcon());
+
this.setSelected(status.getStatusName(),
- new ImageIcon(
- ImageLoader.getBytesInImage(status.getStatusIcon())));
+ new ImageIcon(statusImage));
}
/**
@@ -328,8 +333,34 @@ public PresenceStatus getOnlineStatus()
return onlineStatus;
}
+ /**
+ * Returns the status that is currently selected.
+ * @return the status that is currently selected
+ */
public PresenceStatus getLastSelectedStatus()
{
return lastSelectedStatus;
}
+
+ public int getAccountIndex()
+ {
+ return accountIndex;
+ }
+
+ public void setAccountIndex(int accountIndex)
+ {
+ this.accountIndex = accountIndex;
+ }
+
+ public void paintComponent(Graphics g)
+ {
+ super.paintComponent(g);
+
+ if(accountIndex > 0) {
+ AntialiasingManager.activateAntialiasing(g);
+ g.setColor(Color.DARK_GRAY);
+ g.setFont(Constants.FONT.deriveFont(Font.BOLD, 9));
+ g.drawString(new Integer(accountIndex).toString(), 20, 12);
+ }
+ }
}