
de.lessvoid.nifty.controls.dragndrop.DroppableControl Maven / Gradle / Ivy
package de.lessvoid.nifty.controls.dragndrop;
import de.lessvoid.nifty.EndNotify;
import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.controls.*;
import de.lessvoid.nifty.elements.Element;
import de.lessvoid.nifty.input.NiftyInputEvent;
import de.lessvoid.nifty.screen.Screen;
import de.lessvoid.nifty.tools.SizeValue;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
/**
* The controller class for a droppable element.
*
* @author void
* @author Martin Karing <[email protected]>
* @deprecated Internal control class. Use {@link de.lessvoid.nifty.controls.Droppable}
*/
@Deprecated
public class DroppableControl extends AbstractController implements Droppable {
@Nonnull
private static final Logger log = Logger.getLogger(DroppableControl.class.getName());
@Nullable
private Nifty nifty;
@Nullable
private List filters;
@Nullable
private Element droppableContent;
@Nullable
private DraggableControl draggable;
@Override
public void bind(
@Nonnull final Nifty nifty,
@Nonnull final Screen screen,
@Nonnull final Element element,
@Nonnull final Parameters parameter) {
super.bind(element);
this.nifty = nifty;
droppableContent = element.findElementById("#droppableContent");
if (droppableContent == null) {
log.severe("Failed to locate content area of the droppable. Droppable element will not work. Looked for: " +
"#droppableContent");
}
}
@Override
public void onStartScreen() {
if (droppableContent == null) {
log.severe("No droppable content set. The binding failed or did not run at all.");
} else {
draggable = findDraggableChild(droppableContent);
if (draggable != null) {
Element draggableElement = draggable.getElement();
if (draggableElement != null) {
drop(draggable, reactivate(draggableElement), false);
}
}
}
}
@Override
public boolean inputEvent(@Nonnull final NiftyInputEvent inputEvent) {
return false;
}
@Nonnull
private static EndNotify reactivate(@Nonnull final Element element) {
return new EndNotify() {
@Override
public void perform() {
element.reactivate();
}
};
}
@Nullable
private static DraggableControl findDraggableChild(@Nonnull final Element element) {
List children = element.getChildren();
final int childrenCount = children.size();
for (int i = 0; i < childrenCount; i++) {
Element child = children.get(i);
if (isDraggable(child)) {
return child.getControl(DraggableControl.class);
}
final DraggableControl draggable = findDraggableChild(child);
if (draggable != null) {
return draggable;
}
}
return null;
}
private static boolean isDraggable(@Nonnull final Element element) {
final NiftyInputControl control = element.getAttachedInputControl();
if (control != null) {
return control.getController() instanceof Draggable;
}
return false;
}
protected void drop(@Nonnull final DraggableControl droppedDraggable, final EndNotify endNotify) {
drop(droppedDraggable, endNotify, true);
}
private void drop(
@Nonnull final DraggableControl droppedDraggable,
@Nullable final EndNotify endNotify,
final boolean notifyObservers) {
if (droppableContent == null) {
return;
}
draggable = droppedDraggable;
Element draggableElement = draggable.getElement();
if (draggableElement != null) {
draggableElement.setConstraintX(SizeValue.px(0));
draggableElement.setConstraintY(SizeValue.px(0));
draggableElement.markForMove(droppableContent, endNotify);
}
final Droppable source = droppedDraggable.getDroppable();
droppedDraggable.setDroppable(this);
if (notifyObservers) {
notifyObservers(source, droppedDraggable);
}
}
@Nullable
public DraggableControl getDraggable() {
return draggable;
}
private void notifyObservers(@Nullable final Droppable source, @Nonnull final Draggable droppedDraggable) {
if (nifty == null) {
return;
}
String id = getId();
if (id != null) {
nifty.publishEvent(id, new DroppableDroppedEvent(source, droppedDraggable, this));
}
}
@Override
public void addFilter(@Nonnull final DroppableDropFilter filter) {
if (filters == null) {
filters = new ArrayList();
}
filters.add(filter);
}
@Override
public void removeFilter(@Nonnull final DroppableDropFilter filter) {
if (filters != null) {
filters.remove(filter);
if (filters.isEmpty()) {
filters = null;
}
}
}
@Override
public void removeAllFilters() {
filters = null;
}
protected boolean accept(@Nullable final Droppable source, @Nonnull final Draggable draggable) {
if (filters == null) {
return true;
}
final int filterCount = filters.size();
for (int i = 0; i < filterCount; i++) {
DroppableDropFilter filter = filters.get(i);
if (!filter.accept(source, draggable, this)) {
return false;
}
}
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy