//----------------------------------------------------------------------------//
// //
// U I P r e d i c a t e s //
// //
//----------------------------------------------------------------------------//
// <editor-fold defaultstate="collapsed" desc="hdr"> //
// Copyright © Hervé Bitteur and others 2000-2013. All rights reserved. //
// This software is released under the GNU General Public License. //
// Goto http://kenai.com/projects/audiveris to report bugs or suggestions. //
//----------------------------------------------------------------------------//
// </editor-fold>
package omr.ui.util;
import omr.WellKnowns;
import static java.awt.event.InputEvent.*;
import java.awt.event.MouseEvent;
import javax.swing.SwingUtilities;
/**
* Class {@code UIPredicates} gathers convenient methods to check
* user gesture.
*
* @author Hervé Bitteur
*/
public class UIPredicates
{
//~ Constructors -----------------------------------------------------------
//--------------//
// UIPredicates //
//--------------//
/**
* Not meant to be instantiated.
*/
private UIPredicates ()
{
}
//~ Methods ----------------------------------------------------------------
//------------------//
// isAdditionWanted //
//------------------//
/**
* Predicate to check if an additional selection is wanted.
* Default is the typical selection (left button), while control key is
* pressed.
*
* @param e the mouse context
* @return the predicate result
*/
public static boolean isAdditionWanted (MouseEvent e)
{
if (WellKnowns.MAC_OS_X) {
boolean command = e.isMetaDown();
boolean left = SwingUtilities.isLeftMouseButton(e);
return left && command && !e.isPopupTrigger();
} else {
return (SwingUtilities.isRightMouseButton(e) != SwingUtilities.isLeftMouseButton(
e)) && e.isControlDown();
}
}
//-----------------//
// isContextWanted //
//-----------------//
/**
* Predicate to check if a context selection is wanted.
* Default is the typical pressing with Right button only.
*
* @param e the mouse context
* @return the predicate result
*/
public static boolean isContextWanted (MouseEvent e)
{
if (WellKnowns.MAC_OS_X) {
return e.isPopupTrigger();
} else {
return SwingUtilities.isRightMouseButton(e)
&& !SwingUtilities.isLeftMouseButton(e);
}
}
//--------------//
// isDragWanted //
//--------------//
/**
* Predicate to check whether the zoomed display must be dragged.
* This method can simply be overridden to adapt to another policy.
* Default is to have both left and right buttons pressed when moving.
*
* @param e the mouse event to check
* @return true if drag is desired
*/
public static boolean isDragWanted (MouseEvent e)
{
if (WellKnowns.MAC_OS_X) {
return e.isAltDown();
} else {
int onmask = BUTTON1_DOWN_MASK | BUTTON3_DOWN_MASK;
int offmask = 0;
return (e.getModifiersEx() & (onmask | offmask)) == onmask;
}
}
//----------------//
// isRezoomWanted //
//----------------//
/**
* Predicate to check if the display should be rezoomed to fit as
* close as possible to the rubber definition.
* Default is to have both Shift and Control keys pressed when the mouse is
* released.
*
* @param e the mouse context
* @return the predicate result
*/
public static boolean isRezoomWanted (MouseEvent e)
{
if (WellKnowns.MAC_OS_X) {
return e.isMetaDown() && e.isShiftDown();
} else {
return e.isControlDown() && e.isShiftDown();
}
}
//----------------//
// isRubberWanted //
//----------------//
/**
* Predicate to check if the rubber must be extended while the
* mouse is being moved.
* Default is the typical pressing of Shift key while moving the mouse.
*
* @param e the mouse context
* @return the predicate result
*/
public static boolean isRubberWanted (MouseEvent e)
{
int onmask = BUTTON1_DOWN_MASK | SHIFT_DOWN_MASK;
int offmask = BUTTON2_DOWN_MASK | BUTTON3_DOWN_MASK;
return (e.getModifiersEx() & (onmask | offmask)) == onmask;
}
}