Class MarqueeSelectionTool

All Implemented Interfaces:
RequestConstants, Tool
Direct Known Subclasses:
MarqueeDragTracker

public class MarqueeSelectionTool extends AbstractTool
A Tool which selects multiple EditParts inside a rectangular area of a Graphical Viewer. Selection behavior can be configured by selecting (via setMarqueeBehavior(int)) one of six supported marquee behaviors, which are: By default, only edit parts whose figure's are on the primary layer that are fully enclosed in the marquee selection rectangle will be considered ( BEHAVIOR_NODES_CONTAINED). Besides different marquee behaviors, the tool supports different modes, which the user can influence by pressing modifier keys at the beginning of the drag operation. I.e. if the SHIFT key is pressed at the beginning of the drag, the enclosed items will be appended to the current viewer selection. If the MOD1 key is pressed at the beginning of the drag, the enclosed items will have their selection state inverted.
  • Field Details

    • BEHAVIOR_CONNECTIONS_CONTAINED

      public static final int BEHAVIOR_CONNECTIONS_CONTAINED
      This behavior selects connections that intersect the marquee rectangle.
      Since:
      3.7
      See Also:
    • BEHAVIOR_CONNECTIONS_TOUCHED

      public static final int BEHAVIOR_CONNECTIONS_TOUCHED
      This behavior selects connections that intersect the marquee rectangle.
      Since:
      3.1
      See Also:
    • BEHAVIOR_NODES_CONTAINED

      public static final int BEHAVIOR_NODES_CONTAINED
      This behavior selects nodes completely encompassed by the marquee rectangle. This is the default behavior for this tool.
      Since:
      3.1
      See Also:
    • BEHAVIOR_NODES_TOUCHED

      public static final int BEHAVIOR_NODES_TOUCHED
      This behavior selects nodes that intersect the marquee rectangle.
      Since:
      3.7
      See Also:
    • BEHAVIOR_NODES_AND_CONNECTIONS

      @Deprecated public static final int BEHAVIOR_NODES_AND_CONNECTIONS
      This behavior selects nodes completely encompassed by the marquee rectangle, and all connections between those nodes.
      Since:
      3.1
      See Also:
    • PROPERTY_MARQUEE_BEHAVIOR

      public static final Object PROPERTY_MARQUEE_BEHAVIOR
    • DEFAULT_MARQUEE_BEHAVIOR

      public static final int DEFAULT_MARQUEE_BEHAVIOR
      Constant defining the default marquee selection behavior.
      Since:
      3.7
      See Also:
  • Constructor Details

    • MarqueeSelectionTool

      public MarqueeSelectionTool()
      Creates a new MarqueeSelectionTool of default type BEHAVIOR_NODES_CONTAINED.
  • Method Details

    • applyProperty

      protected void applyProperty(Object key, Object value)
      Description copied from class: AbstractTool
      This method is invoked from AbstractTool.setProperties(Map). Sub-classes can override to add support for more properties. This method should fail silently in case of any error.

      AbstractTool uses introspection to match any keys with properties. For instance, the key "defaultCursor" would lead to the invocation of AbstractTool.setDefaultCursor(Cursor) with the provided value.

      Overrides:
      applyProperty in class AbstractTool
      Parameters:
      key - the key; may be null
      value - the new value
      See Also:
    • calculateMarqueeSelectedEditParts

      protected Collection<? extends GraphicalEditPart> calculateMarqueeSelectedEditParts()
      Called from performMarqueeSelect() to determine those GraphicalEditParts that are affected by the current marquee selection. In default and append mode, the edit parts returned here will become selected in the current viewer's new selection (which is calculated and set in performMarqueeSelect()), while in toggle mode their selection state will be inverted. Calculation is delegated to calculatePrimaryMarqueeSelectedEditParts() and calculateSecondaryMarqueeSelectedEditParts(Collection) to compute the set of marquee selected edit parts in a two step-process, where all directly affected edit parts are determined first, and those indirectly affected (related connections in case of BEHAVIOR_NODES_TOUCHED_AND_RELATED_CONNECTIONS, or BEHAVIOR_NODES_CONTAINED_AND_RELATED_CONNECTIONS) afterwards. Clients may overwrite to customize the calculation of marquee selected edit parts.
      Returns:
      A collection containing all GraphicalEditPart that should be regarded as being included in the current marquee selection, i.e. which should get selected in default or append mode, and whose selection state should get inverted in toggle mode.
      Since:
      3.7
    • deactivate

      public void deactivate()
      Erases feedback if necessary and puts the tool into the terminal state.
      Specified by:
      deactivate in interface Tool
      Overrides:
      deactivate in class AbstractTool
      See Also:
    • getCommandName

      protected String getCommandName()
      Description copied from class: AbstractTool
      Returns the identifier of the command that is being sought. This name is also the named that will be logged in the debug view.
      Specified by:
      getCommandName in class AbstractTool
      Returns:
      the identifier for the command
      See Also:
    • getCurrentMarqueeSelectionRectangle

      protected Rectangle getCurrentMarqueeSelectionRectangle()
      Returns the current marquee selection rectangle.
      Returns:
      A Rectangle representing the current marquee selection.
      Since:
      3.7
    • getCurrentSelectionMode

      protected int getCurrentSelectionMode()
      Returns the current selection mode, i.e. default, append, or toggle
      Returns:
      on of DEFAULT_MODE, APPEND_MODE, or TOGGLE_MODE
      Since:
      3.7
    • getDebugName

      protected String getDebugName()
      Description copied from class: AbstractTool
      Returns the debug name for this tool.
      Overrides:
      getDebugName in class AbstractTool
      Returns:
      the debug name
      See Also:
    • createMarqueeRectangleFigure

      protected IFigure createMarqueeRectangleFigure()
      create a new marquee rectangle feedback figure Sub classes my provide their own feedback rectangle
      Since:
      3.13
    • handleButtonDown

      protected boolean handleButtonDown(int button)
      Description copied from class: AbstractTool
      Called when the mouse button has been pressed. By default, nothing happens and false is returned. Subclasses may override this method to interpret the meaning of a mouse down. Returning true indicates that the button down was handled in some way.
      Overrides:
      handleButtonDown in class AbstractTool
      Parameters:
      button - which button went down
      Returns:
      true if the buttonDown was handled
      See Also:
    • handleButtonUp

      protected boolean handleButtonUp(int button)
      Description copied from class: AbstractTool
      Called when the mouse button has been released. By default, nothing happens and false is returned. Subclasses may override this method to interpret the mouse up. Returning true indicates that the mouse up was handled in some way.
      Overrides:
      handleButtonUp in class AbstractTool
      Parameters:
      button - the button being released
      Returns:
      true if the button up was handled
      See Also:
    • handleDragInProgress

      protected boolean handleDragInProgress()
      Description copied from class: AbstractTool
      Called whenever a mouse is being dragged and the drag threshold has been exceeded. Prior to the drag threshold being exceeded, only AbstractTool.handleDrag() is called. This method gets called repeatedly for every mouse move during the drag. By default, nothing happens and false is returned. Subclasses may override this method to interpret the drag. Returning true indicates that the drag was handled.
      Overrides:
      handleDragInProgress in class AbstractTool
      Returns:
      true if the drag was handled
      See Also:
    • handleFocusLost

      protected boolean handleFocusLost()
      Description copied from class: AbstractTool
      Handles high-level processing of a focus lost event. By default, nothing happens and false is returned. Subclasses may override this method to interpret the focus lost event. Return true to indicate that the event was processed.
      Overrides:
      handleFocusLost in class AbstractTool
      Returns:
      true if the event was handled
      See Also:
    • handleInvalidInput

      protected boolean handleInvalidInput()
      This method is called when mouse or keyboard input is invalid and erases the feedback.
      Overrides:
      handleInvalidInput in class AbstractTool
      Returns:
      true
    • handleKeyDown

      protected boolean handleKeyDown(KeyEvent e)
      Handles high-level processing of a key down event. KeyEvents are forwarded to the current viewer's KeyHandler, via KeyHandler.keyPressed(KeyEvent).
      Overrides:
      handleKeyDown in class AbstractTool
      Parameters:
      e - the key event
      Returns:
      true if the key down was handled.
      See Also:
    • isMarqueeSelectable

      protected boolean isMarqueeSelectable(GraphicalEditPart editPart)
      Decides whether the given edit part may potentially be included in the current marquee selection.
      Parameters:
      editPart - the EditPart of interest
      Returns:
      true if the given edit part may be included into the marquee selection, false otherwise
      Since:
      3.7
    • isViewerImportant

      protected boolean isViewerImportant(EditPartViewer viewer)
      MarqueeSelectionTool is only interested in GraphicalViewers, not TreeViewers.
      Overrides:
      isViewerImportant in class AbstractTool
      Parameters:
      viewer - the viewer where the event occured
      Returns:
      true if this tool is interested in events occuring in the given viewer; false otherwise
      See Also:
    • performMarqueeSelect

      protected void performMarqueeSelect()
      Calculates and sets a new viewer selection based on the current marquee selection. By default, this method delegates to calculateMarqueeSelectedEditParts() to obtain the set of edit parts, which should be regarded as being affected by the current marquee selection. It then calculates a new viewer selection based on the current selection state of all affected edit parts and the current selection mode of the tool ( getCurrentSelectionMode()), as well as the current selection of the viewer (in case of APPEND mode), which is then passed to the current viewer.
      Since:
      3.7
    • setMarqueeBehavior

      public void setMarqueeBehavior(int type)
      Sets the type of parts that this tool will select. This method should only be invoked once: when the tool is being initialized.
      Parameters:
      type - BEHAVIOR_CONNECTIONS_TOUCHED or BEHAVIOR_CONNECTIONS_CONTAINED BEHAVIOR_NODES_TOUCHED or BEHAVIOR_NODES_CONTAINED or BEHAVIOR_NODES_TOUCHED_AND_RELATED_CONNECTIONS or BEHAVIOR_NODES_CONTAINED_AND_RELATED_CONNECTIONS
      Since:
      3.1
    • setViewer

      public void setViewer(EditPartViewer viewer)
      Description copied from class: AbstractTool
      Sets the active EditPartViewer. The active viewer is the viewer from which the last event was received.
      Specified by:
      setViewer in interface Tool
      Overrides:
      setViewer in class AbstractTool
      Parameters:
      viewer - the viewer
      See Also: