org.flexdock.docking.floating.policy

## Class DefaultFloatPolicy

- java.lang.Object
- - org.flexdock.docking.floating.policy.FloatPolicy.NullFloatPolicy
  - - org.flexdock.docking.floating.policy.DefaultFloatPolicy

All Implemented Interfaces:
  FloatPolicy

    public class DefaultFloatPolicy
    extends FloatPolicy.NullFloatPolicy

This class provides an implementation of the `FloatPolicy` interface to provide default behavior for the framework. It blocks floating operations for `Dockables` without any frame drag sources, for already floating `Dockables` that cannot be reparented within a new dialog, or if global floating support has been disabled.

Author:
  Christopher Butler

### Nested Class Summary

### Nested classes/interfaces inherited from interface org.flexdock.docking.floating.policy.FloatPolicy

`FloatPolicy.NullFloatPolicy`

### Constructor Summary

Constructors
Constructor and Description
`DefaultFloatPolicy()`

### Method Summary

Methods
`static DefaultFloatPolicy` `getInstance()` Returns a singleton instance of `DefaultFloatPolicy`.
`boolean` `isFloatDropAllowed(DockingEvent evt)` Checks the previous `DockingPort` for the specified `DockingEvent` and returns `false` if it is in a floating dialog and contains less than two `Dockables`.
`boolean` `isFloatingAllowed(Dockable dockable)` Blocks floating support (returns false) if `dockable` is `null`, if `FloatPolicyManager.isGlobalFloatingEnabled()` returns `false`, or if there are no entries within the `Set` returned by `dockable.getFrameDragSources()`.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### DefaultFloatPolicy

    public DefaultFloatPolicy()

### Method Detail

#### getInstance

    public static DefaultFloatPolicy getInstance()

Returns a singleton instance of `DefaultFloatPolicy`.

Returns:
  a singleton instance of `DefaultFloatPolicy`.

#### isFloatDropAllowed

    public boolean isFloatDropAllowed(DockingEvent evt)

Checks the previous `DockingPort` for the specified `DockingEvent` and returns `false` if it is in a floating dialog and contains less than two `Dockables`. A floating dialog may contain multiple `Dockables`, each of which may be dragged out of the current dialog to float in their own dialog. However, if a floating dialog only contains a single `Dockable`, it makes no sense to remove the `Dockable` only to float it within another dialog. This situation is caught by this method and the docking operation is blocked.

Specified by:
  `isFloatDropAllowed` in interface `FloatPolicy`
Overrides:
  `isFloatDropAllowed` in class `FloatPolicy.NullFloatPolicy`
Parameters:
  `evt` - the `DockingEvent` to be checked for drop-to-float support
Returns:
  `false` if the `DockingEvent` is attempting to float an already floating `Dockable` with no other `Dockables` in its current dialog; `true` otherwise.
See Also:
  `FloatPolicy.isFloatDropAllowed(DockingEvent)`, `DockingEvent.getOldDockingPort()`, `FloatingDockingPort.getDockableCount()`, `DockingEvent.consume()`

#### isFloatingAllowed

    public boolean isFloatingAllowed(Dockable dockable)

Blocks floating support (returns false) if `dockable` is `null`, if `FloatPolicyManager.isGlobalFloatingEnabled()` returns `false`, or if there are no entries within the `Set` returned by `dockable.getFrameDragSources()`. Otherwise, this method returns `true`.

Specified by:
  `isFloatingAllowed` in interface `FloatPolicy`
Overrides:
  `isFloatingAllowed` in class `FloatPolicy.NullFloatPolicy`
Parameters:
  `dockable` - the `Dockable` to be checked for floating support
Returns:
  `false` if floating is blocked for the specified `Dockable`; `true` otherwise.
See Also:
  `Dockable.getFrameDragSources()`, `FloatPolicyManager.isGlobalFloatingEnabled()`