Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common
   * Development and Distribution License("CDDL") (collectively, the
   * "License"). You may not use this file except in compliance with the
  * License. You can obtain a copy of the License at
  * http://www.netbeans.org/cddl-gplv2.html
  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
  * specific language governing permissions and limitations under the
  * License.  When distributing the software, include this License Header
  * Notice in each file and include the License file at
  * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
  * particular file as subject to the "Classpath" exception as provided
  * by Sun in the GPL Version 2 section of the License file that
  * accompanied this code. If applicable, add the following below the
  * License Header, with the fields enclosed by brackets [] replaced by
  * your own identifying information:
  * "Portions Copyrighted [year] [name of copyright owner]"
  *
  * If you wish your version of this file to be governed by only the CDDL
  * or only the GPL Version 2, indicate your decision by adding
  * "[Contributor] elects to include this software in this distribution
  * under the [CDDL or GPL Version 2] license." If you do not indicate a
  * single choice of license, a recipient has the option to distribute
  * your version of this file under either the CDDL, the GPL Version 2 or
  * to extend the choice of license to its licensees as provided above.
  * However, if you add GPL Version 2 code and therefore, elected the GPL
  * Version 2 license, then the option applies only if the new code is
  * made subject to such option by the copyright holder.
  *
  * Contributor(s):
  *
  * Portions Copyrighted 2009 Sun Microsystems, Inc.
  */
 
 package org.netbeans.modules.kenai.ui.treelist;
 
 import java.awt.Point;
UI for tree-like list which forwards mouse events to renderer component under mouse cursor.

Author(s):
S. Aubrecht
 
 public class TreeListUI extends BasicListUI {
 
     @Override
 
         final MouseInputListener orig = super.createMouseInputListener();
 
         return new MouseInputListener() {
 
             public void mouseClicked(MouseEvent e) {
                 if( !redispatchComponent(e) )
                     orig.mouseClicked(e);
             }
 
             public void mousePressed(MouseEvent e) {
                 if( !redispatchComponent(e) ) {
                     ifshowPopup(e) )
                         return;
                     orig.mousePressed(e);
                 }
             }
 
             public void mouseReleased(MouseEvent e) {
                 if( !redispatchComponent(e) ) {
                     ifshowPopup(e) )
                         return;
                     orig.mouseReleased(e);
                 }
             }
 
             public void mouseEntered(MouseEvent e) {
                 if( !redispatchComponent(e) )
                     orig.mouseEntered(e);
             }
 
             public void mouseExited(MouseEvent e) {
                 if( !redispatchComponent(e) )
                     orig.mouseExited(e);
             }
 
            public void mouseDragged(MouseEvent e) {
                if( !redispatchComponent(e) )
                    orig.mouseDragged(e);
            }
            public void mouseMoved(MouseEvent e) {
                if( !redispatchComponent(e) ) {
                    .setCursor(Cursor.getDefaultCursor());
                    orig.mouseMoved(e);
                } else {
                    .setCursor(Cursor.getPredefinedCursor(.));
                }
            }
        };
    }
    private boolean redispatchComponent(MouseEvent e) {
        Point p = e.getPoint();
        int index = .locationToIndex(p);
        ifindex < 0 || index >= .getModel().getSize() )
            return false;
        ListCellRenderer renderer = .getCellRenderer();
        ifnull == renderer )
            return false;
        Component renComponent = renderer.getListCellRendererComponent(.getModel().getElementAt(index), indexfalsefalse);
        ifnull == renComponent )
            return false;
        Rectangle rect = .getCellBounds(indexindex);
        ifnull == rect )
            return false;
        renComponent.setBounds(0,0,rect.widthrect.height);
        renComponent.doLayout();
        Point p3 = rect.getLocation();
        Point p2 = new Pointp.x - p3.xp.y - p3.y );
        Component dispatchComponent =
                SwingUtilities.getDeepestComponentAt(renComponent,
                        p2.xp2.y);
        ifdispatchComponent instanceof AbstractButton ) {
            if( !((AbstractButton)dispatchComponent).isEnabled() )
                return false;
            Point p4 = SwingUtilities.convertPoint(renComponentp2dispatchComponent);
            MouseEvent newEvent = new MouseEvent(dispatchComponent,
                  e.getID(),
                  e.getWhen(),
                  e.getModifiers(),
                  p4.x,p4.y,
                  e.getClickCount(),
                  e.isPopupTrigger(),
                                  . );
            dispatchComponent.dispatchEvent(newEvent);
            .repaint(rect);
            e.consume();
            return true;
        }
        return false;
    }
    private boolean showPopupMouseEvent e ) {
        if( !e.isPopupTrigger() )
            return false;
        if( !( instanceof TreeList) )
            return false;
        int index = .locationToIndex(e.getPoint());
        Rectangle rect = .getCellBounds(indexindex);
        if( !rect.contains(e.getPoint() ) )
            return false;
        ((TreeList)).showPopupMenuAtindexe.getPoint() );
        return true;
    }
New to GrepCode? Check out our FAQ X