001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.palette.ui;
043:
044: import java.awt.Point;
045: import java.awt.Rectangle;
046: import java.awt.event.KeyEvent;
047: import java.awt.event.KeyListener;
048: import java.awt.event.MouseEvent;
049: import java.awt.event.MouseListener;
050: import javax.swing.JTree;
051: import javax.swing.tree.DefaultTreeModel;
052: import javax.swing.tree.TreePath;
053: import org.netbeans.modules.palette.DefaultSettings;
054: import org.openide.explorer.view.Visualizer;
055: import org.openide.nodes.Node;
056:
057: /**
058: * This listener controls click and double click on the CheckNodes. In addition
059: * to it provides support for keyboard node checking/unchecking and opening
060: * document.
061: *
062: * todo (#pf): Improve behaviour and comments.
063: *
064: * @author Pavel Flaska, S. Aubrecht
065: */
066: class CheckListener implements MouseListener, KeyListener {
067:
068: DefaultSettings settings;
069:
070: public CheckListener(DefaultSettings settings) {
071: this .settings = settings;
072: }
073:
074: public void mouseClicked(MouseEvent e) {
075: // todo (#pf): we need to solve problem between click and double
076: // click - click should be possible only on the check box area
077: // and double click should be bordered by title text.
078: // we need a test how to detect where the mouse pointer is
079: JTree tree = (JTree) e.getSource();
080: Point p = e.getPoint();
081: int x = e.getX();
082: int y = e.getY();
083: int row = tree.getRowForLocation(x, y);
084: TreePath path = tree.getPathForRow(row);
085:
086: // if path exists and mouse is clicked exactly once
087: if (null == path)
088: return;
089:
090: Node node = Visualizer.findNode(path.getLastPathComponent());
091: if (null == node)
092: return;
093:
094: Rectangle chRect = CheckRenderer.getCheckBoxRectangle();
095: Rectangle rowRect = tree.getPathBounds(path);
096: chRect.setLocation(chRect.x + rowRect.x, chRect.y + rowRect.y);
097: if (e.getClickCount() == 1 && chRect.contains(p)) {
098: boolean isSelected = settings.isNodeVisible(node);
099: settings.setNodeVisible(node, !isSelected);
100: tree.repaint();
101: }
102: }
103:
104: public void keyTyped(KeyEvent e) {
105: }
106:
107: public void keyReleased(KeyEvent e) {
108: }
109:
110: public void mouseEntered(MouseEvent e) {
111: }
112:
113: public void mouseExited(MouseEvent e) {
114: }
115:
116: public void mousePressed(MouseEvent e) {
117: }
118:
119: public void mouseReleased(MouseEvent e) {
120: }
121:
122: public void keyPressed(KeyEvent e) {
123: if (e.getKeyChar() == ' ') {
124: JTree tree = (JTree) e.getSource();
125: TreePath path = tree.getSelectionPath();
126: if (null == path)
127: return;
128:
129: Node node = Visualizer
130: .findNode(path.getLastPathComponent());
131: if (null == node)
132: return;
133:
134: boolean isSelected = settings.isNodeVisible(node);
135: settings.setNodeVisible(node, !isSelected);
136: tree.repaint();
137:
138: e.consume();
139: }
140: }
141: } // end CheckNodeListener
|