Package com.projity.help

Source Code of com.projity.help.HelpUtil

/*
* Created on Sep 10, 2007
*
* Copyright 2004, Projity Inc.
*/
package com.projity.help;

import java.awt.Component;
import java.awt.Container;
import java.awt.Frame;
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.util.HashMap;

import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.table.JTableHeader;

import com.projity.configuration.Settings;
import com.projity.field.Field;
import com.projity.pm.graphic.IconManager;
import com.projity.pm.graphic.spreadsheet.SpreadSheet;
import com.projity.pm.graphic.spreadsheet.SpreadSheetModel;
import com.projity.util.BrowserControl;
import com.projity.util.Environment;

public class HelpUtil implements KeyEventDispatcher {
  private  HashMap<Component,String> map = new HashMap<Component,String>();
  private static HelpUtil instance = null;
  private static final int DELAY_BETWEEN_HELPS = 5000;
  private long lastHelpTime = 0L;
  public boolean noHelp = false;
 
  private synchronized static HelpUtil getInstance() {
    if (instance == null)
      instance = new HelpUtil();
    return instance;
  }
  private HelpUtil() {
    noHelp=Environment.getOs()==Environment.MAC&&Environment.isApplet();
    if (noHelp) System.out.print("no help");
    if (noHelp) return;
    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
       
  }
  public static String helpTipImg = "<img src=\"" + IconManager.class.getResource("/toolbarButtonGraphics/general/Information16.gif")
  + "\"> F1";
  // a tooltip with a help icon and F1
  public static String helpTipHtml = "<html><img src=\"" + IconManager.class.getResource("/toolbarButtonGraphics/general/Information16.gif")
  + "\"> F1</html>";
  public static void addHelp(Component c, String address) {
    if (getInstance().noHelp) return;
    if (c instanceof JComponent && ((JComponent)c).getToolTipText() == null)
      ((JComponent)c).setToolTipText(helpTipHtml);
    getInstance().map.put(c,address);
  }
  public static String getHelpURL(String address) {
    return Settings.HELP_HOME+address;   
  }
  public static void addDocHelp(Component c, String address) {
    addHelp(c,getHelpURL(address));
  }

  public static String findHelp(Component c) {
    if (getInstance().noHelp) return null;
    String result = null;
    while (c != null) {
      if ((result = getInstance().map.get(c)) != null)
        break;
      c = c.getParent();
    }
    return result;
  }
  public static boolean doHelp(Component c) {
    if (getInstance().noHelp) return false;
    String help = findHelp(c);
    if (help != null) {
      long time = System.currentTimeMillis();
      boolean doHelp = time - getInstance().lastHelpTime > DELAY_BETWEEN_HELPS;
      getInstance().lastHelpTime = time;
   
      if (doHelp) { // prevents doubles which arrive for some reason
        BrowserControl.displayURL(help);
        return true;
      }
    }
    return false;
  }
  public static boolean doHelp() {
    if (getInstance().noHelp) return false;
    Point pt = MouseInfo.getPointerInfo().getLocation();
    Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();

    while (owner != null) { // get dialog or frame which is focus owner
      if (owner instanceof JDialog || owner instanceof Frame) {
        break;
      }
      owner = owner.getParent();
    }
    // Get component at point
    Component c = null;
    Point loc = owner.getLocationOnScreen();
    Point offsetPoint = new Point(pt.x- loc.x, pt.y-loc.y);
    c = ((Container)owner).findComponentAt(offsetPoint);

    if (c == null)
      c = owner;
   
    // do help for most detailed item
    while(c != null) {
      if (c instanceof JTableHeader) { // if clicked on row header, see if there is help for the field
        JTableHeader th = (JTableHeader)c;
        loc = c.getLocationOnScreen();
        offsetPoint = new Point(pt.x- loc.x, pt.y-loc.y)
        int col =  th.columnAtPoint(offsetPoint);
        SpreadSheet ss = (SpreadSheet)th.getTable();
        Field f = ((SpreadSheetModel)ss.getModel()).getFieldInColumn(col+1);
        if (f.getHelp()!=null) {
          BrowserControl.displayURL(Settings.HELP_HOME+f.getHelp());
          return true;
        }
      }
      if (doHelp(c))
        return true;
      c = c.getParent();
    }
    return false;

  }

  public boolean dispatchKeyEvent(KeyEvent e) {
    if (noHelp) return false;
    if (e.getKeyCode() == KeyEvent.VK_F1 && !e.isConsumed())
      if (doHelp()) {
        e.consume();
        return true;
      }
    return false;
  }
}
TOP

Related Classes of com.projity.help.HelpUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.