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); + } + } }