/* * 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.osdependent.jdic; import java.awt.*; import java.awt.event.*; import javax.swing.*; import net.java.sip.communicator.impl.osdependent.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.globalstatus.*; /** * The <tt>StatusSimpleSelector</tt> is a submenu which allow to select a status * for a protocol provider which does not support the OperationSetPresence * * @author Nicolas Chamouard * @author Lubomir Marinov */ public class StatusSimpleSelector implements ActionListener, ItemListener { /** * The protocol provider */ private final ProtocolProviderService provider; private final Object menu; /** * Creates an instance of <tt>StatusSimpleSelector</tt> * * @param protocolProvider the protocol provider * @param swing */ public StatusSimpleSelector( ProtocolProviderService protocolProvider, boolean swing) { this.provider = protocolProvider; /* the parent item */ String text = provider.getAccountID().getDisplayName(); this.menu = swing ? new JMenu(text) : new Menu(text); /* the menu itself */ createMenuItem("service.gui.ONLINE", "online"); createMenuItem("service.gui.OFFLINE", "offline"); updateStatus(); } private void createMenuItem(String textKey, String name) { String text = Resources.getString(textKey); if (menu instanceof JMenu) { JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(text); menuItem.setName(name); menuItem.addActionListener(this); ((JMenu) menu).add(menuItem); } else { CheckboxMenuItem menuItem = new CheckboxMenuItem(text); menuItem.setName(name); menuItem.addItemListener(this); ((Menu) menu).add(menuItem); } } public Object getMenu() { return menu; } /** * Change the status of the protocol according to * the menu item selected * @param evt the event containing the menu item name */ public void actionPerformed(ActionEvent evt) { changeStatus(evt.getSource()); } /** * Changes status corresponding the seelcted object. * @param source the source object selected */ private void changeStatus(Object source) { String itemName; if (source instanceof Component) itemName = ((Component) source).getName(); else itemName = ((MenuComponent) source).getName(); if(itemName.equals("online")) { OsDependentActivator.getGlobalStatusService() .publishStatus(provider, GlobalStatusEnum.ONLINE); } else { OsDependentActivator.getGlobalStatusService() .publishStatus(provider, GlobalStatusEnum.OFFLINE); } } public void updateStatus() { if (menu instanceof AbstractButton) { byte[] iconBytes = provider .getProtocolIcon().getIcon(ProtocolIcon.ICON_SIZE_16x16); if ((iconBytes != null) && (iconBytes.length > 0)) { ImageIcon icon = new ImageIcon(iconBytes); if (!provider.isRegistered()) icon = new ImageIcon( LightGrayFilter .createDisabledImage(icon.getImage())); ((AbstractButton) menu).setIcon(icon); } } String onlineText = Resources.getString("service.gui.ONLINE"); String offlineText = Resources.getString("service.gui.OFFLINE"); if(menu instanceof Menu) { Menu theMenu = (Menu) menu; for(int i =0; i < theMenu.getItemCount(); i++) { MenuItem item = theMenu.getItem(i); if(item instanceof CheckboxMenuItem) { if(item.getLabel().equals(onlineText)) { if(provider.isRegistered()) ((CheckboxMenuItem)item).setState(true); else ((CheckboxMenuItem)item).setState(false); } else if(item.getLabel().equals(offlineText)) { if(provider.isRegistered()) ((CheckboxMenuItem)item).setState(false); else ((CheckboxMenuItem)item).setState(true); } } } } else if(menu instanceof JMenu) { JMenu theMenu = (JMenu) menu; for(int i =0; i < theMenu.getItemCount(); i++) { JMenuItem item = theMenu.getItem(i); if(item instanceof JCheckBoxMenuItem) { if(item.getText().equals(onlineText)) { if(provider.isRegistered()) item.setSelected(true); else item.setSelected(false); } else if(item.getText().equals(offlineText)) { if(provider.isRegistered()) item.setSelected(false); else item.setSelected(true); } } } } } /** * Listens for changes in item state (CheckboxMenuItem)s. * @param e the event. */ public void itemStateChanged(ItemEvent e) { Object soutceItem = e.getSource(); if(e.getStateChange() == ItemEvent.SELECTED) { if(soutceItem instanceof CheckboxMenuItem) { changeStatus(soutceItem); } } else if(e.getStateChange() == ItemEvent.DESELECTED) { if(soutceItem instanceof CheckboxMenuItem) { ((CheckboxMenuItem)soutceItem).setState(true); } } } }