From 465ecefce19becff5d943a50ebdba4951c62b69e Mon Sep 17 00:00:00 2001 From: Yana Stamcheva Date: Mon, 11 Aug 2008 06:09:28 +0000 Subject: [PATCH] Chat menu bar implements plugin component listener. --- .../impl/gui/main/chat/menus/HelpMenu.java | 7 +- .../main/chat/menus/MessageWindowMenuBar.java | 109 +++++++++++++++--- 2 files changed, 96 insertions(+), 20 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/menus/HelpMenu.java b/src/net/java/sip/communicator/impl/gui/main/chat/menus/HelpMenu.java index d1b2aa064..ba2501172 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/menus/HelpMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/menus/HelpMenu.java @@ -9,20 +9,17 @@ import java.awt.*; import java.awt.event.*; -import java.util.*; - -import org.osgi.framework.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.customcontrols.*; import net.java.sip.communicator.impl.gui.event.*; import net.java.sip.communicator.impl.gui.i18n.*; import net.java.sip.communicator.impl.gui.main.chat.*; -import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.gui.Container; -import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.util.*; + +import org.osgi.framework.*; /** * The HelpMenu is a menu in the main application menu bar. * diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/menus/MessageWindowMenuBar.java b/src/net/java/sip/communicator/impl/gui/main/chat/menus/MessageWindowMenuBar.java index ae37dbd6d..1ef313f5f 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/menus/MessageWindowMenuBar.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/menus/MessageWindowMenuBar.java @@ -1,8 +1,7 @@ /* * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. + * + * Distributable under LGPL license. See terms of license at gnu.org. */ package net.java.sip.communicator.impl.gui.main.chat.menus; @@ -11,16 +10,28 @@ import javax.swing.*; +import org.osgi.framework.*; + +import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.customcontrols.*; +import net.java.sip.communicator.impl.gui.event.*; import net.java.sip.communicator.impl.gui.main.chat.*; import net.java.sip.communicator.impl.gui.utils.*; +import net.java.sip.communicator.service.gui.*; +import net.java.sip.communicator.service.gui.Container; +import net.java.sip.communicator.util.*; + /** - * The MessageWindowMenuBar is the menu bar in the chat window where + * The MessageWindowMenuBar is the menu bar in the chat window where * all menus are added. * * @author Yana Stamcheva */ -public class MessageWindowMenuBar extends JMenuBar { +public class MessageWindowMenuBar + extends JMenuBar + implements PluginComponentListener +{ + private Logger logger = Logger.getLogger(MessageWindowMenuBar.class); private FileMenu fileMenu; @@ -32,9 +43,11 @@ public class MessageWindowMenuBar extends JMenuBar { /** * Creates an instance of MessageWindowMenuBar. + * * @param parentWindow The parent ChatWindow. */ - public MessageWindowMenuBar(ChatWindow parentWindow) { + public MessageWindowMenuBar(ChatWindow parentWindow) + { this.parentWindow = parentWindow; @@ -45,12 +58,15 @@ public MessageWindowMenuBar(ChatWindow parentWindow) { helpMenu = new HelpMenu(this.parentWindow); this.init(); + + this.initPluginComponents(); } /** * Initializes the menu bar, by adding all contained menus. */ - private void init() { + private void init() + { this.add(fileMenu); @@ -58,18 +74,20 @@ private void init() { this.add(helpMenu); } - + /** - * Returns the currently selected menu. + * Returns the currently selected menu. */ public SIPCommMenu getSelectedMenu() { int menuCount = this.getMenuCount(); - - for(int i = 0; i < menuCount; i ++) { + + for (int i = 0; i < menuCount; i++) + { SIPCommMenu menu = (SIPCommMenu) this.getMenu(i); - - if(menu.isSelected()) { + + if (menu.isSelected()) + { return menu; } } @@ -85,9 +103,70 @@ public void paintComponent(Graphics g) { super.paintComponent(g); - Image backgroundImage - = ImageLoader.getImage(ImageLoader.MENU_BACKGROUND); + Image backgroundImage = + ImageLoader.getImage(ImageLoader.MENU_BACKGROUND); g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), null); } + + /** + * Initialize plugin components already registered for this container. + */ + private void initPluginComponents() + { + // Search for plugin components registered through the OSGI bundle + // context. + ServiceReference[] serRefs = null; + + String osgiFilter = "(" + + Container.CONTAINER_ID + + "="+Container.CONTAINER_CHAT_MENU_BAR.getID()+")"; + + try + { + serRefs = GuiActivator.bundleContext.getServiceReferences( + PluginComponent.class.getName(), + osgiFilter); + } + catch (InvalidSyntaxException exc) + { + logger.error("Could not obtain plugin reference.", exc); + } + + if (serRefs != null) + { + for (int i = 0; i < serRefs.length; i ++) + { + PluginComponent component = (PluginComponent) GuiActivator + .bundleContext.getService(serRefs[i]);; + + this.add((Component)component.getComponent()); + } + } + + GuiActivator.getUIService().addPluginComponentListener(this); + } + + public void pluginComponentAdded(PluginComponentEvent event) + { + PluginComponent c = event.getPluginComponent(); + + if (c.getContainer().equals(Container.CONTAINER_CHAT_MENU_BAR)) + { + this.add((Component) c.getComponent()); + + this.revalidate(); + this.repaint(); + } + } + + public void pluginComponentRemoved(PluginComponentEvent event) + { + PluginComponent c = event.getPluginComponent(); + + if (c.getContainer().equals(Container.CONTAINER_CHAT_MENU_BAR)) + { + this.remove((Component) c.getComponent()); + } + } }