/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.impl.gui.main.presence; import java.awt.*; import java.awt.event.*; import javax.swing.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.globalstatus.*; /** * The <tt>SimpleStatusSelectorBox</tt> is a <tt>SIPCommMenu</tt> that contains * two statuses ONLINE and OFFLINE. It's used to represent the status of a * protocol provider which doesn't support presence operation set. * * @author Yana Stamcheva * @author Lubomir Marinov * @author Adam Netocny */ public class SimpleStatusMenu extends StatusSelectorMenu implements ActionListener { private final JCheckBoxMenuItem onlineItem; private final JCheckBoxMenuItem offlineItem; /** * Take care for global status items, that only one is selected. */ private ButtonGroup group = new ButtonGroup(); /** * Creates an instance of <tt>SimpleStatusMenu</tt>. * * @param protocolProvider the protocol provider */ public SimpleStatusMenu(ProtocolProviderService protocolProvider) { this( protocolProvider, protocolProvider.getAccountID().getDisplayName(), getProtocolImage( protocolProvider, ProtocolIcon.ICON_SIZE_16x16)); } /** * Creates an instance of <tt>SimpleStatusMenu</tt>. * * @param protocolProvider the protocol provider * @param displayName the display name for the menu * @param onlineImage the image used for the online state */ private SimpleStatusMenu(ProtocolProviderService protocolProvider, String displayName, Image onlineImage) { super( displayName, (onlineImage == null) ? null : new ImageIcon(onlineImage), protocolProvider); setToolTipText("<html><b>" + displayName + "</b><br>Offline</html>"); JLabel titleLabel = new JLabel(displayName); titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD)); add(titleLabel); addSeparator(); onlineItem = createMenuItem( "service.gui.ONLINE", getIcon(), GlobalStatusEnum.ONLINE_STATUS); offlineItem = createMenuItem( "service.gui.OFFLINE", (onlineImage == null) ? null : new ImageIcon( LightGrayFilter.createDisabledImage( onlineImage)), GlobalStatusEnum.OFFLINE_STATUS); group.add(onlineItem); group.add(offlineItem); /* * Make sure it correctly depicts the status and don't just rely on it * being automatically updated. */ updateStatus(null); } private JCheckBoxMenuItem createMenuItem( String textKey, Icon icon, String name) { JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem( GuiActivator.getResources().getI18NString(textKey), icon); menuItem.setName(name); menuItem.addActionListener(this); add(menuItem); return menuItem; } /** * Handles the <tt>ActionEvent</tt> triggered when one of the items in the * list is selected. * * @param e the <tt>ActionEvent</tt> that notified us */ public void actionPerformed(ActionEvent e) { if(GuiActivator.getGlobalStatusService() == null) return; JMenuItem menuItem = (JMenuItem) e.getSource(); String itemName = menuItem.getName(); if (itemName.equals(GlobalStatusEnum.ONLINE_STATUS)) { GuiActivator.getGlobalStatusService() .publishStatus(protocolProvider, GlobalStatusEnum.ONLINE); } else { GuiActivator.getGlobalStatusService() .publishStatus(protocolProvider, GlobalStatusEnum.OFFLINE); } } /** * Stops the timer that manages the connecting animated icon. * @param presenceStatus as we do not support presence this param * will be null. */ @Override public void updateStatus(PresenceStatus presenceStatus) { String tooltip = this.getToolTipText(); tooltip = tooltip.substring(0, tooltip.lastIndexOf("<br>")); ImageIcon statusImage = ImageLoader.getAccountStatusImage(protocolProvider); JCheckBoxMenuItem menuItem = protocolProvider.isRegistered() ? onlineItem : offlineItem; menuItem.setSelected(true); setSelected(new SelectedObject(statusImage, menuItem)); setToolTipText(tooltip.concat("<br>" + menuItem.getText())); } /** * Loads resources for this component. */ @Override public void loadSkin() { super.loadSkin(); Image image = getProtocolImage(protocolProvider, ProtocolIcon.ICON_SIZE_16x16); if (image != null) setIcon(new ImageIcon(image)); if (onlineItem != null) onlineItem.setIcon(getIcon()); if ((offlineItem != null) && (image != null)) { offlineItem.setIcon( new ImageIcon(LightGrayFilter.createDisabledImage(image))); } } private static Image getProtocolImage( ProtocolProviderService pps, String iconSize) { byte[] bytes = pps.getProtocolIcon().getIcon(iconSize); return (bytes == null) ? null : ImageUtils.getBytesInImage(bytes); } }