/*
* 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.chat.menus;
import java.awt.*;
import javax.swing.*;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.main.chat.*;
import net.java.sip.communicator.impl.gui.main.menus.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.gui.Container;
// disambiguation
/**
* The <tt>MessageWindowMenuBar</tt> is the menu bar in the chat window where
* all menus are added.
*
* @author Yana Stamcheva
* @author Lyubomir Marinov
*/
public class MessageWindowMenuBar
extends SIPCommWindowMenuBar
{
private final ChatFileMenu fileMenu;
private final EditMenu editMenu;
private final ChatToolsMenu optionsMenu;
private final HelpMenu helpMenu;
/**
* The <tt>PluginContainer</tt> which deals with <tt>PluginComponent</tt>s
* on behalf of this <tt>MessageWindowMenuBar</tt>.
*/
private final PluginContainer pluginContainer;
/**
* Initializes a new <tt>MessageWindowMenuBar</tt> instance.
*
* @param parentWindow the ChatWindow which is to be the parent of the new
* instance
*/
public MessageWindowMenuBar(ChatWindow parentWindow)
{
super("service.gui.CHAT_MENU_FOREGROUND");
fileMenu = new ChatFileMenu(parentWindow);
editMenu = new EditMenu(parentWindow);
optionsMenu = new ChatToolsMenu(parentWindow);
helpMenu = new HelpMenu(parentWindow);
this.init();
pluginContainer
= new PluginContainer(this, Container.CONTAINER_CHAT_MENU_BAR)
{
/**
* Overrides
* {@link PluginContainer#addComponentToContainer(Component, JComponent, int)}.
* Keeps the Help menu last as it is its conventional place.
*
* @param component the <tt>Component</tt> to be added to
* <tt>container</tt>
* @param container the <tt>JComponent</tt> container to
* which <tt>component</tt> is to be added
* @param preferredIndex ignored because
* <tt>MessageWindowMenuBar</tt> keeps the Help menu last as
* it is its conventional place
*/
@Override
protected void addComponentToContainer(
Component component,
JComponent container,
int preferredIndex)
{
/*
* Apply the opaque property in order to prevent plugin
* menus from looking different than the built-in menus.
*/
if (component instanceof SIPCommMenu)
((SIPCommMenu) component).setOpaque(false);
container.add(component, getComponentIndex(helpMenu));
}
};
parentWindow.addChatChangeListener(new ChatChangeListener()
{
public void chatChanged(ChatPanel panel)
{
MetaContact contact
= GuiActivator.getUIService().getChatContact(panel);
for (PluginComponent c : pluginContainer.getPluginComponents())
c.setCurrentContact(contact);
}
});
}
/**
* Runs clean-up for associated resources which need explicit disposal (e.g.
* listeners keeping this instance alive because they were added to the
* model which operationally outlives this instance).
*/
public void dispose()
{
pluginContainer.dispose();
helpMenu.dispose();
optionsMenu.dispose();
}
/**
* Initializes the menu bar, by adding all contained menus.
*/
private void init()
{
this.add(fileMenu);
this.add(editMenu);
this.add(optionsMenu);
this.add(helpMenu);
}
/**
* Gets the currently selected <tt>JMenu</tt>.
*
* @return the currently selected <tt>JMenu</tt>
*/
public JMenu getSelectedMenu()
{
for (int i = 0, menuCount = getMenuCount(); i < menuCount; i++)
{
JMenu menu = this.getMenu(i);
if (menu.isSelected())
return menu;
}
return null;
}
}