Package net.sourceforge.squirrel_sql.fw.gui.debug

Source Code of net.sourceforge.squirrel_sql.fw.gui.debug.DebugEventListener

/*
* Copyright (C) 2007 Rob Manning
* manningr@users.sourceforge.net
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package net.sourceforge.squirrel_sql.fw.gui.debug;

import java.awt.AWTEvent;
import java.awt.Container;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.MouseEvent;

import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.ToolTipManager;
import javax.swing.border.Border;

import net.sourceforge.squirrel_sql.fw.util.StringUtilities;


/**
*  This code was developed originally by Romain Guy.  The original - and simpler - version is here:
*  http://www.jroller.com/gfx/entry/dynamic_debugging_with_swing
*  This is an event listener that listens for mouse events (enter, exit and drag) and installs a
*  highlighting border in the component that has been entered and restores the original border in the
*  component that is exited.  This will also set the tooltip text of the component to the name or class
*  to help with finding the source code for the component being highlighted.
*/
public class DebugEventListener implements AWTEventListener
{
  public void setEnabled(boolean enable) {
    Toolkit kit = Toolkit.getDefaultToolkit();
    if (enable) {
      /* register as a listener for mouse events */
      kit.addAWTEventListener(this, AWTEvent.MOUSE_EVENT_MASK|AWTEvent.MOUSE_MOTION_EVENT_MASK);
     
      /* show all tooltips for ten seconds before hiding */
      ToolTipManager.sharedInstance().setDismissDelay(10000);     
    } else {
      kit.removeAWTEventListener(this);
    }
  }
 
  public void eventDispatched(AWTEvent event)
  {
    Object o = event.getSource();
    if (o instanceof JComponent && o != null)
    {
      JComponent source = (JComponent) o;
      switch (event.getID())
      {
      case MouseEvent.MOUSE_DRAGGED:
        printDebugInfo(source, event);
        break;
      case MouseEvent.MOUSE_ENTERED:
        printDebugInfo(source, event);
        setToolTipText(source, event);
        setBorder(source, event);
        break;
      case MouseEvent.MOUSE_EXITED:
        printDebugInfo(source, event);
        setBorder(source, event);
        break;
      }
    }
  }

  private void setBorder(JComponent source, AWTEvent event) {
    Border border = source.getBorder();
    switch (event.getID())
    {
    case MouseEvent.MOUSE_ENTERED:
      if (border != null)
      {
        source.setBorder(new DebugBorder(border));
      }
      break;     
    case MouseEvent.MOUSE_EXITED:
      if (border != null && border instanceof DebugBorder)
      {
        source.setBorder(((DebugBorder) border).getDelegate());
      }
      break;     
    }
  }
 
  private void setToolTipText(JComponent source, AWTEvent event) {
   
    Container parent = source.getParent();
    String sourceName = source.getName();
    String sourceClassName = source.getClass().toString();
    String parentClassName = parent == null ? null : parent.getClass().toString();
   
    StringBuilder toolTipText = new StringBuilder(getEventMessagePrefix(event));
   
    if (source instanceof AbstractButton) {
      toolTipText.append("Button with parentClass=");
      toolTipText.append(parentClassName);
    } else {
      if (!StringUtilities.isEmpty(sourceName)) {
        toolTipText.append(sourceName);
      } else if (!StringUtilities.isEmpty(sourceClassName)) {
        toolTipText.append(sourceClassName);
      }
    }
    source.setToolTipText(toolTipText.toString());
  }

  private void printDebugInfo(JComponent source, AWTEvent event)
  {
    Container parent = source.getParent();
    String sourceName = source.getName();
    String sourceClassName = source.getClass().toString();     
    String parentName = parent == null ? null : parent.getName();
    String parentClassName = parent == null ? null : parent.getClass().toString();
   
    StringBuilder msg = new StringBuilder(getEventMessagePrefix(event));
    msg.append("\n");
    msg.append("\t sourceName:").append(sourceName).append("\n");
    msg.append("\t sourceClassName:").append(sourceClassName).append("\n");
    msg.append("\t parentName:").append(parentName).append("\n");
    msg.append("\t parentClassName:").append(parentClassName);
    System.out.println(msg.toString());
  }
 
  private String getEventMessagePrefix(AWTEvent event) {
    String result = null;
    switch (event.getID()) {
    case MouseEvent.MOUSE_DRAGGED:
      result = "Mouse dragged: ";
      break;
    case MouseEvent.MOUSE_ENTERED:
      result = "Mouse entered: ";
      break;
    case MouseEvent.MOUSE_EXITED:
      result = "Mouse exited: ";
      break;
    default:
      result = "Unknown EventType: ";
    }
    return result;
  }
}
TOP

Related Classes of net.sourceforge.squirrel_sql.fw.gui.debug.DebugEventListener

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.