package org.geogebra.desktop.gui.layout;
/**
* The state of the drag'n'drop procedure.
*
* @author Florian Sonner
*/
public class DnDState {
/**
* The panel will be placed in the top area of the target panel.
*/
public static final int TOP = 1;
/**
* The panel will be placed in the right area of the target panel.
*/
public static final int RIGHT = 2;
/**
* The panel will be placed at the bottom of the target panel.
*/
public static final int BOTTOM = 4;
/**
* The panel will be placed in the left area of the target panel.
*/
public static final int LEFT = 8;
/**
* The panel will be placed above the split pane (just for horizontal split
* panes).
*/
public static final int TOP_OUT = 16;
/**
* The panel will be placed on the right side of the split pane (just for
* vertical split panes).
*/
public static final int RIGHT_OUT = 32;
/**
* The panel will be placed at the bottom of the split pane (just for
* horizontal split panes).
*/
public static final int BOTTOM_OUT = 64;
/**
* The panel will be placed on the left side of the split pane (just for
* vertical split panes).
*/
public static final int LEFT_OUT = 128;
/**
* The panel which was dragged by the user. Can't be changed from the
* outside as a new source should create a new DockState.
*/
private DockPanelD source;
/**
* The panel the mouse is above at the moment.
*/
private DockPanelD target;
/**
* The exact region the mouse is above at the moment, see the constants of
* this class.
*/
private int region = TOP;
public DnDState(DockPanelD source) {
this.source = source;
}
public DockPanelD getSource() {
return source;
}
public void setTarget(DockPanelD target) {
this.target = target;
}
public DockPanelD getTarget() {
return target;
}
public void setRegion(int region) {
if (region < 0 || region > LEFT_OUT) {
throw new IllegalArgumentException();
}
this.region = region;
}
public int getRegion() {
return region;
}
public boolean isRegionOut() {
return region >= TOP_OUT;
}
}