2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2015 - Marcos CARDINOT
5 * This file must be used under the terms of the CeCILL.
6 * This source file is licensed as described in the file COPYING, which
7 * you should have received as part of this distribution. The terms
8 * are also available at
9 * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
13 package org.scilab.modules.xcos.palette.listener;
15 import java.awt.Component;
16 import java.awt.Point;
17 import java.awt.Rectangle;
18 import java.awt.event.MouseAdapter;
19 import java.awt.event.MouseEvent;
20 import java.awt.geom.Rectangle2D;
22 import javax.swing.SwingUtilities;
24 import org.scilab.modules.xcos.palette.PaletteCtrl;
25 import org.scilab.modules.xcos.palette.view.PaletteBlockView;
26 import org.scilab.modules.xcos.palette.view.PaletteView;
29 * Implement the default mouse listener for the palette view
30 * @author Marcos CARDINOT <mcardinot@gmail.com>
32 public final class PaletteMouseListener extends MouseAdapter {
34 private Point startPoint;
36 /** Default constructor */
37 public PaletteMouseListener() {
42 * Clear selections when palette view is clicked
46 public void mouseClicked(MouseEvent e) {
47 super.mouseClicked(e);
48 PaletteCtrl.clearSelections();
52 * Invoked when the mouse is pressed
56 public void mousePressed(MouseEvent e) {
57 super.mousePressed(e);
58 this.startPoint = e.getPoint();
62 * Select blocks by dragging the mouse pointer
66 public void mouseDragged(MouseEvent e) {
67 super.mouseDragged(e);
68 if (!SwingUtilities.isLeftMouseButton(e)) {
72 Point endPoint = e.getPoint();
73 double x = Math.min(startPoint.getX(), endPoint.getX());
74 double y = Math.min(startPoint.getY(), endPoint.getY());
75 double w = Math.abs(startPoint.getX() - endPoint.getX());
76 double h = Math.abs(startPoint.getY() - endPoint.getY());
78 Rectangle2D.Double rect = new Rectangle2D.Double(x, y, w, h);
79 PaletteView view = (PaletteView) e.getSource();
80 view.setSelectionRectangle(rect);
82 Component[] blocks = view.getComponents();
83 for (Component block : blocks) {
84 Rectangle b = block.getBounds();
85 boolean selected = rect.contains(b.getCenterX(), b.getCenterY());
86 ((PaletteBlockView) block).getController().setSelected(selected);
89 // makes the scrollbar follow the selection
90 view.scrollRectToVisible(new Rectangle(endPoint));
97 public void mouseReleased(MouseEvent e) {
98 super.mouseReleased(e);
99 PaletteView view = (PaletteView) e.getSource();
100 view.setSelectionRectangle(null);
101 Component[] blocks = view.getComponents();
102 if (blocks.length > 0) {
103 blocks[0].requestFocus();