package com.github.czyzby.lml.vis.parser.impl.tag.builder;
import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup;
import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
import com.github.czyzby.lml.parser.tag.LmlActorBuilder;
import com.github.czyzby.lml.vis.ui.FixedSizeGridGroup;
import com.kotcrab.vis.ui.layout.FloatingGroup;
import com.kotcrab.vis.ui.layout.GridGroup;
import com.kotcrab.vis.ui.layout.HorizontalFlowGroup;
import com.kotcrab.vis.ui.layout.VerticalFlowGroup;
import com.kotcrab.vis.ui.widget.Draggable;
/** Allows to build drag pane widgets.
*
* @author MJ */
public class DragPaneLmlActorBuilder extends LmlActorBuilder {
private GroupType groupType = GroupType.HORIZONTAL;
/** @return type of group managed by the drag pane. */
public GroupType getGroupType() {
return groupType;
}
/** @param groupType type of group managed by the drag pane. */
public void setGroupType(final GroupType groupType) {
this.groupType = groupType;
}
/** Contains all default group types managed by the drag pane. When referenced in drag pane type attribute, has to
* match the exact enum name (case ignored).
*
* @author MJ
* @see com.github.czyzby.lml.vis.parser.impl.attribute.building.GroupTypeLmlAttribute */
public static enum GroupType {
/** Constructs {@link HorizontalGroup}. */
HORIZONTAL {
@Override
public WidgetGroup getGroup() {
return new HorizontalGroup();
}
},
/** Constructs {@link VerticalGroup}. */
VERTICAL {
@Override
public WidgetGroup getGroup() {
return new VerticalGroup();
}
},
/** Constructs {@link GridGroup}. */
GRID {
@Override
public WidgetGroup getGroup() {
return new GridGroup();
}
},
/** Constructs {@link FixedSizeGridGroup}. */
FIXED {
@Override
public WidgetGroup getGroup() {
return new FixedSizeGridGroup(16, 32);
}
@Override
public Draggable getDraggable(final WidgetGroup group) {
return FixedSizeGridGroup.getDraggable((FixedSizeGridGroup) group);
}
},
/** Constructs {@link HorizontalFlowGroup}. */
HFLOW {
@Override
public WidgetGroup getGroup() {
return new HorizontalFlowGroup();
}
},
/** Constructs {@link VerticalFlowGroup}. */
VFLOW {
@Override
public WidgetGroup getGroup() {
return new VerticalFlowGroup();
}
},
/** Constructs {@link FloatingGroup}. */
FLOATING {
@Override
public WidgetGroup getGroup() {
return new FloatingGroup();
}
};
/** @return a new instance of selected group type. */
public abstract WidgetGroup getGroup();
/** @param group an instance of selected group, see {@link #getGroup()}.
* @return a customized instance of {@link Draggable} for this group type. */
public Draggable getDraggable(final WidgetGroup group) {
return new Draggable();
}
}
}