HelpManager.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
org.xnap.gui.util |
![]() |
![]() |
XNap 3 |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/*
* XNap - A P2P framework and client.
*
* See the file AUTHORS for copyright information.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.xnap.gui.util;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.net.URL;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.help.CSH;
import javax.help.HelpBroker;
import javax.help.HelpSet;
import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.MenuElement;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import javax.swing.plaf.BorderUIResource;
import javax.swing.plaf.basic.BasicBorders;
import org.apache.log4j.Logger;
import org.xnap.loader.XNapClassLoader;
/**
* A helper class providing the main helpset and helpbroker and some
* convenience functions for registering help keys in components.
*/
public class HelpManager
{
//--- Constant(s) ---
public static final String XNAP_MANUAL = "xnap-manual";
//--- Data field(s) ---
private static HelpSet mainHelpSet = null;
private static XNapHelpBroker mainHelpBroker = null;
private static ActionListener tracker = null;
private static Logger logger = Logger.getLogger(HelpManager.class);
//--- Constructor(s) ---
private HelpManager()
{
}
//--- Method(s) ---
/**
* Returns the main helpset.
*
* If helpset isn't loaded yet, it will be loaded on demand.
*
* @return returns null if helpset couldn't be loaded.
*/
public static HelpSet getMainHelpSet()
{
if (mainHelpSet == null) {
mainHelpSet = loadHelpSet(XNAP_MANUAL);
}
return mainHelpSet;
}
/**
* Returns the main helpbroker.
*/
public static XNapHelpBroker getMainHelpBroker()
{
if (mainHelpBroker == null) {
if (getMainHelpSet() != null) {
mainHelpBroker = new XNapHelpBroker(getMainHelpSet());
}
}
return mainHelpBroker;
}
/**
* Adds helpset to the main helpset hierarchy.
*/
public static void add(HelpSet hs)
{
getMainHelpSet().add(hs);
}
/**
* Removes helpset from the main helpset hierarchy.
*/
public static void remove(HelpSet hs)
{
getMainHelpSet().remove(hs);
}
/**
* Helper method to load helpsets.
*
* @param helpset name of the helpset file without the ending, e.g.
* "xnap-manual" from "xnap-manual.hs".
*/
public static HelpSet loadHelpSet(String helpset)
{
URL url = HelpSet.findHelpSet(XNapClassLoader.getInstance(), helpset);
if (url != null) {
try {
return new HelpSet(XNapClassLoader.getInstance(), url);
}
catch (Exception e) {
logger.debug("Could not load helpset" + helpset, e);
}
}
else {
logger.debug("Could not find helpset");
}
return null;
}
/**
* Convenience method enabling the help keys and the context help key for
* a JComponent.
*/
public static void enableHelpKeys(JComponent comp, String id, HelpSet hs)
{
HelpBroker hb = getMainHelpBroker();
if (hb != null) {
hb.enableHelpKey(comp, id, hs);
enableContextHelpKey(comp);
}
}
/**
* Enables the context help key for a JComponent.
*/
public static void enableContextHelpKey(JComponent jc)
{
if (getMainHelpBroker() != null) {
jc.registerKeyboardAction
(getTracker(), KeyStroke.getKeyStroke(KeyEvent.VK_F1,
KeyEvent.SHIFT_MASK),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
}
}
public static ActionListener getTracker()
{
if (tracker == null) {
tracker = new Tracker();
}
return tracker;
}
private static class Tracker implements ActionListener
{
private ActionListener tracker =
new CSH.DisplayHelpAfterTracking(getMainHelpBroker());
private class CBPair
{
public JComponent c;
public Border b;
public boolean p;
public CBPair(JComponent c, Border b, boolean p)
{
this.c = c;
this.b = b;
this.p = p;
}
public CBPair(JComponent c, Border b)
{
this(c, b, false);
}
}
public void actionPerformed(ActionEvent event)
{
List borders = new LinkedList();
if (event.getSource() instanceof Component) {
Component c = (Component)event.getSource();
c = getTopComponent(c);
setBorders(c, borders);
}
tracker.actionPerformed(event);
resetBorders(borders);
}
private Component getTopComponent(Component c)
{
for (Component parent = c; parent != null;) {
c = parent;
if (parent instanceof Window) {
break;
}
if (parent instanceof MenuElement) {
if (parent instanceof JPopupMenu) {
parent = ((JPopupMenu)parent).getInvoker();
}
else {
parent = ((MenuElement)parent).getComponent();
}
}
parent = parent.getParent();
}
return c;
}
private void setBorders(Component c, List borders)
{
if (c instanceof JComponent) {
JComponent jc = (JComponent)c;
String helpID = (String)jc.getClientProperty("HelpID");
if (helpID != null) {
try {
BorderUIResource.CompoundBorderUIResource b =
new BorderUIResource.CompoundBorderUIResource
(new LineBorder(Color.RED),
jc.getBorder());
if (jc instanceof AbstractButton) {
AbstractButton ab = (AbstractButton)jc;
borders.add(new CBPair(jc, jc.getBorder(),
ab.isBorderPainted()));
ab.setBorderPainted(true);
ab.setBorder(b);
}
else {
borders.add(new CBPair(jc, jc.getBorder()));
jc.setBorder(b);
}
}
catch (IllegalArgumentException iae) {
}
}
}
if (c instanceof Container) {
Container cont = (Container)c;
for (int i = 0; i < cont.getComponentCount(); i++) {
setBorders(cont.getComponent(i), borders);
}
}
else if (c instanceof JMenu) {
setBorders(((JMenu)c).getPopupMenu(), borders);
}
}
private void resetBorders(List borders)
{
for (Iterator it = borders.iterator(); it.hasNext();) {
CBPair pair = (CBPair)it.next();
if (pair.c instanceof AbstractButton) {
((AbstractButton)pair.c).setBorderPainted(pair.p);
}
pair.c.setBorder(pair.b);
}
}
}
}
The table below shows all metrics for HelpManager.java.




