From 02680e54ebcaddbdbe2855a1e49af2e261fdde8d Mon Sep 17 00:00:00 2001 From: Yana Stamcheva Date: Tue, 16 May 2006 16:08:11 +0000 Subject: [PATCH] StatusSelectorBox component generalized in SIPCommSelectorBox, in order to be used as a common control in other places in the gui. --- .../impl/gui/main/StatusSelectorBox.java | 142 +++--------------- .../customcontrols/SIPCommSelectorBox.java | 141 +++++++++++++++++ 2 files changed, 160 insertions(+), 123 deletions(-) create mode 100644 src/net/java/sip/communicator/impl/gui/main/customcontrols/SIPCommSelectorBox.java 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 0b7a55741..c3f084aa7 100644 --- a/src/net/java/sip/communicator/impl/gui/main/StatusSelectorBox.java +++ b/src/net/java/sip/communicator/impl/gui/main/StatusSelectorBox.java @@ -28,6 +28,7 @@ import javax.swing.JPopupMenu; import javax.swing.Timer; +import net.java.sip.communicator.impl.gui.main.customcontrols.SIPCommSelectorBox; import net.java.sip.communicator.impl.gui.main.i18n.Messages; import net.java.sip.communicator.impl.gui.utils.AntialiasingManager; import net.java.sip.communicator.impl.gui.utils.ImageLoader; @@ -38,12 +39,13 @@ import net.java.sip.communicator.service.protocol.icqconstants.IcqStatusEnum; import net.java.sip.communicator.util.Logger; -public class StatusSelectorBox extends JLabel - implements MouseListener { - - private JPopupMenu popup; - - private Map itemsMap; +/** + * The component containging the list of statuses for a protocol, + * where the user could change its status. + * + * @author Yana Stamcheva + */ +public class StatusSelectorBox extends SIPCommSelectorBox{ private Logger logger = Logger.getLogger(StatusSelectorBox.class.getName()); @@ -51,90 +53,43 @@ public class StatusSelectorBox extends JLabel private BufferedImage[] animatedImageArray; - private Image backgroundImage = ImageLoader - .getImage(ImageLoader.STATUS_SELECTOR_BOX); - private Connecting connecting = new Connecting(); private ProtocolProviderService protocolProvider; + private Map itemsMap; + public StatusSelectorBox( MainFrame mainFrame, ProtocolProviderService protocolProvider) { + super(); - this.setPreferredSize(new Dimension( - this.backgroundImage.getWidth(this), - this.backgroundImage.getHeight(this))); - - this.setVerticalAlignment(JLabel.CENTER); - - this.setHorizontalAlignment(JLabel.CENTER); - - this.mainFrame = mainFrame; - + this.mainFrame = mainFrame; this.protocolProvider = protocolProvider; - - this.popup = new JPopupMenu(); - - this.popup.setInvoker(this); - - this.addMouseListener(this); } public StatusSelectorBox( MainFrame mainFrame, ProtocolProviderService protocolProvider, Map itemsMap, Image selectedItem) { - - this.setPreferredSize(new Dimension( - this.backgroundImage.getWidth(this), - this.backgroundImage.getHeight(this))); - - this.setVerticalAlignment(JLabel.CENTER); - - this.setHorizontalAlignment(JLabel.CENTER); - - this.setIcon(new ImageIcon(selectedItem)); + super(selectedItem); + this.itemsMap = itemsMap; this.mainFrame = mainFrame; this.protocolProvider = protocolProvider; - this.itemsMap = itemsMap; - - this.popup = new JPopupMenu(); - - this.popup.setInvoker(this); - - this.addMouseListener(this); this.init(); } public void init() { - Iterator iter = itemsMap.entrySet().iterator(); while (iter.hasNext()) { - Map.Entry entry = (Map.Entry)iter.next(); - - JMenuItem item - = new JMenuItem - (((IcqStatusEnum)entry.getKey()).getStatusName(), - new ImageIcon((Image)entry.getValue())); - - item.addActionListener(new ItemActionListener()); - - this.popup.add(item); - - } - } - - public void addItem(String text, Icon icon){ - - JMenuItem item = new JMenuItem( text, icon); - item.addActionListener(new ItemActionListener()); - - this.popup.add(item); + this.addItem(((IcqStatusEnum)entry.getKey()).getStatusName(), + new ImageIcon((Image)entry.getValue()), + new ItemActionListener()); + } } private class ItemActionListener implements ActionListener{ @@ -229,7 +184,7 @@ else if(e1.getErrorCode() break; } } - setIcon(menuItem.getIcon()); + setSelected(menuItem); } } } @@ -247,66 +202,7 @@ public void stopConnecting(){ this.connecting.stop(); } - - public Point calculatePopupLocation(){ - - Component component = this; - Point point = new Point(); - int x = this.getX(); - int y = this.getY(); - - while(component.getParent() != null){ - - component = component.getParent(); - - x += component.getX(); - y += component.getY(); - } - - point.x = x; - point.y = y + this.getHeight(); - - return point; - } - - protected void paintComponent(Graphics g){ - - AntialiasingManager.activateAntialiasing(g); - - g.drawImage(this.backgroundImage, 0, 0, this); - - super.paintComponent(g); - } - - public void mouseClicked(MouseEvent e) { - - if (!this.popup.isVisible()) { - this.popup.setLocation(calculatePopupLocation()); - this.popup.setVisible(true); - } - } - - public void mouseEntered(MouseEvent e) { - // TODO Auto-generated method stub - - } - - public void mouseExited(MouseEvent e) { - // TODO Auto-generated method stub - - } - - public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub - - } - - public void mouseReleased(MouseEvent e) { - // TODO Auto-generated method stub - } - - private class Connecting extends Timer { public Connecting(){ diff --git a/src/net/java/sip/communicator/impl/gui/main/customcontrols/SIPCommSelectorBox.java b/src/net/java/sip/communicator/impl/gui/main/customcontrols/SIPCommSelectorBox.java new file mode 100644 index 000000000..6cdc36572 --- /dev/null +++ b/src/net/java/sip/communicator/impl/gui/main/customcontrols/SIPCommSelectorBox.java @@ -0,0 +1,141 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.gui.main.customcontrols; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Point; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.Iterator; +import java.util.Map; + +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; + +import net.java.sip.communicator.impl.gui.utils.AntialiasingManager; +import net.java.sip.communicator.impl.gui.utils.ImageLoader; + +/** + * SIPCommSelectorBox is very similar to a JComboBox. It + * allows having a list of icon-text pairs and when choosing + * on of them, to show only the selected icon without the text. + * + * @author Yana Stamcheva + */ +public class SIPCommSelectorBox extends JLabel + implements MouseListener { + + private JPopupMenu popup; + + private Object selectedItem; + + private Image backgroundImage = ImageLoader + .getImage(ImageLoader.STATUS_SELECTOR_BOX); + + public SIPCommSelectorBox(){ + + this.setPreferredSize(new Dimension( + this.backgroundImage.getWidth(this), + this.backgroundImage.getHeight(this))); + + this.setVerticalAlignment(JLabel.CENTER); + + this.setHorizontalAlignment(JLabel.CENTER); + + this.popup = new JPopupMenu(); + + this.popup.setInvoker(this); + + this.addMouseListener(this); + } + + public SIPCommSelectorBox(Object selectedItem){ + this(); + + this.selectedItem = selectedItem; + + if(selectedItem instanceof Image) + this.setIcon(new ImageIcon((Image)selectedItem)); + else + this.setText(selectedItem.toString()); + } + + public void addItem(String text, Icon icon, + ActionListener actionListener){ + + JMenuItem item = new JMenuItem(text, icon); + + item.addActionListener(actionListener); + + this.popup.add(item); + } + + public Point calculatePopupLocation(){ + + Component component = this; + Point point = new Point(); + int x = this.getX(); + int y = this.getY(); + + while(component.getParent() != null){ + + component = component.getParent(); + + x += component.getX(); + y += component.getY(); + } + + point.x = x; + point.y = y + this.getHeight(); + + return point; + } + + protected void paintComponent(Graphics g){ + + AntialiasingManager.activateAntialiasing(g); + + g.drawImage(this.backgroundImage, 0, 0, this); + + super.paintComponent(g); + } + + public void mouseClicked(MouseEvent e) { + + if (!this.popup.isVisible()) { + this.popup.setLocation(calculatePopupLocation()); + this.popup.setVisible(true); + } + } + + public void mouseEntered(MouseEvent e) { + // TODO Auto-generated method stub + } + + public void mouseExited(MouseEvent e) { + // TODO Auto-generated method stub + } + + public void mousePressed(MouseEvent e) { + // TODO Auto-generated method stub + } + + public void mouseReleased(MouseEvent e) { + // TODO Auto-generated method stub + } + + public void setSelected(JMenuItem menuItem){ + this.setIcon(menuItem.getIcon()); + } +}