diff --git a/examples/gdx-lml-tests/assets/i18n/bundle.properties b/examples/gdx-lml-tests/assets/i18n/bundle.properties
index 3a1d8014..ab3fee02 100644
--- a/examples/gdx-lml-tests/assets/i18n/bundle.properties
+++ b/examples/gdx-lml-tests/assets/i18n/bundle.properties
@@ -2,7 +2,7 @@
# main.lml
mainTitle=LML tests
-mainSubtitle=by MJ, 2015-2016
+mainSubtitle=by MJ, 2015-2017
textAreaPrompt=Enter LML text to parse or select an example.
parsingButton=Parse {0} document
toggleHighlight=Toggle syntax highlighting (might slow down templates rendering)
diff --git a/examples/gdx-lml-vis-tests/assets/i18n/bundle.properties b/examples/gdx-lml-vis-tests/assets/i18n/bundle.properties
index 53539ec6..80b65482 100644
--- a/examples/gdx-lml-vis-tests/assets/i18n/bundle.properties
+++ b/examples/gdx-lml-vis-tests/assets/i18n/bundle.properties
@@ -2,7 +2,7 @@
# main.lml
mainTitle=LML tests
-mainSubtitle=by MJ & Kotcrab, 2015-2016
+mainSubtitle=by MJ & Kotcrab, 2015-2017
textAreaPrompt=Enter LML text to parse or select an example.
parsingButton=Parse {0} document
toggleHighlight=Toggle syntax highlighting (might slow down templates rendering)
@@ -108,6 +108,7 @@ vis/formValidator=Vis: formValidator
vis/floatingGroup=Vis: floatingGroup
vis/gridGroup=Vis: gridGroup
vis/highlightTextArea=Vis: highlightTextArea
+vis/horizontalCollapsibleWidget=Vis: horizontalCollapsible
vis/horizontalFlow=Vis: horizontalFlow
vis/linkLabel=Vis: linkLabel
vis/listView=Vis: listView
diff --git a/examples/gdx-lml-vis-tests/assets/templates/examples/vis/horizontalCollapsibleWidget.lml b/examples/gdx-lml-vis-tests/assets/templates/examples/vis/horizontalCollapsibleWidget.lml
new file mode 100644
index 00000000..b2820f3f
--- /dev/null
+++ b/examples/gdx-lml-vis-tests/assets/templates/examples/vis/horizontalCollapsibleWidget.lml
@@ -0,0 +1,24 @@
+
+
+Show all.
+
+
+ Collapse me.
+
+
+
+
+
+
+
+
+
+ Converted to label.
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/gdx-lml-vis-tests/core/src/main/java/com/github/czyzby/tests/Main.java b/examples/gdx-lml-vis-tests/core/src/main/java/com/github/czyzby/tests/Main.java
index 1d04c06b..8092a089 100644
--- a/examples/gdx-lml-vis-tests/core/src/main/java/com/github/czyzby/tests/Main.java
+++ b/examples/gdx-lml-vis-tests/core/src/main/java/com/github/czyzby/tests/Main.java
@@ -58,9 +58,10 @@ public class Main extends AbstractApplicationListener {
// Vis unique tags:
"vis/basicColorPicker", "vis/busyBar", "vis/collapsibleWidget", "vis/colorPicker", "vis/draggable",
"vis/dragPane", "vis/fixedSizeGridGroup", "vis/floatingGroup", "vis/formValidator", "vis/gridGroup",
- "vis/highlightTextArea", "vis/horizontalFlow", "vis/linkLabel", "vis/listView", "vis/menu",
- "vis/multiSplitPane", "vis/radioButton", "vis/scrollableTextArea", "vis/separator", "vis/spinner",
- "vis/tabbedPane", "vis/toast", "vis/tooltip", "vis/validatableTextField", "vis/verticalFlow");
+ "vis/highlightTextArea", "vis/horizontalCollapsibleWidget", "vis/horizontalFlow", "vis/linkLabel",
+ "vis/listView", "vis/menu", "vis/multiSplitPane", "vis/radioButton", "vis/scrollableTextArea",
+ "vis/separator", "vis/spinner", "vis/tabbedPane", "vis/toast", "vis/tooltip", "vis/validatableTextField",
+ "vis/verticalFlow");
private static final String MAIN_VIEW_TEMPLATE = "templates/main.lml";
private MainView view;
diff --git a/examples/gdx-lml-vis-tests/core/src/main/java/com/github/czyzby/tests/reflected/MainView.java b/examples/gdx-lml-vis-tests/core/src/main/java/com/github/czyzby/tests/reflected/MainView.java
index 1a56c53b..3a689f18 100644
--- a/examples/gdx-lml-vis-tests/core/src/main/java/com/github/czyzby/tests/reflected/MainView.java
+++ b/examples/gdx-lml-vis-tests/core/src/main/java/com/github/czyzby/tests/reflected/MainView.java
@@ -313,10 +313,19 @@ public void showAllCollapsedWidgets() {
for (final Actor actor : resultTable.getChildren()) {
if (actor instanceof CollapsibleWidget) {
((CollapsibleWidget) actor).setCollapsed(false);
+ } else if (actor instanceof HorizontalCollapsibleWidget) {
+ ((HorizontalCollapsibleWidget) actor).setCollapsed(false);
}
}
}
+ /* templates/examples/vis/horizontalCollapsibleWidget.lml */
+
+ @LmlAction("collapseHorizontal")
+ public void toggleCollapsedStatus(final HorizontalCollapsibleWidget collapsibleWidget) {
+ collapsibleWidget.setCollapsed(!collapsibleWidget.isCollapsed());
+ }
+
/* templates/examples/vis/colorPicker.lml */
/** @param result result of a color picker dialog. Will become an actor's color. */
diff --git a/lml-vis/README.md b/lml-vis/README.md
index 3879a2ae..d0922f6b 100644
--- a/lml-vis/README.md
+++ b/lml-vis/README.md
@@ -73,6 +73,8 @@ Make sure to check `gdx-lml` changes as well!
- `showSelectionCheckboxes` attribute added to `FileChooser` tag.
- `disabled` attribute added to `Spinner` tag.
+- `verticalCollapsible` alias added for `CollapsibleWidget` tag.
+- `HorizontalCollapsibleWidget` tag support. Aliases: `horizontalCollapsible`, `horizontalCollapsibleWidget`, attributes: `collapse`, `collapsed` (boolean).
1.7 -> 1.8
diff --git a/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/VisLmlSyntax.java b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/VisLmlSyntax.java
index 99ebe832..be8adf9a 100644
--- a/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/VisLmlSyntax.java
+++ b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/VisLmlSyntax.java
@@ -36,6 +36,7 @@
import com.github.czyzby.lml.vis.parser.impl.attribute.button.ImageButtonGenerateDisabledLmlAttribute;
import com.github.czyzby.lml.vis.parser.impl.attribute.button.TextButtonImageLmlAttribute;
import com.github.czyzby.lml.vis.parser.impl.attribute.collapsible.CollapsedLmlAttribute;
+import com.github.czyzby.lml.vis.parser.impl.attribute.collapsible.HorizontalCollapsedLmlAttribute;
import com.github.czyzby.lml.vis.parser.impl.attribute.draggable.BlockInputLmlAttribute;
import com.github.czyzby.lml.vis.parser.impl.attribute.draggable.DeadzoneRadiusLmlAttribute;
import com.github.czyzby.lml.vis.parser.impl.attribute.draggable.DragListenerLmlAttribute;
@@ -231,7 +232,8 @@ protected void registerActorTags() {
// Vis unique actors:
addTagProvider(new BasicColorPickerLmlTagProvider(), "basicColorPicker", "basicPicker");
addTagProvider(new BusyBarLmlTagProvider(), "busyBar");
- addTagProvider(new CollapsibleWidgetLmlTagProvider(), "collapsible", "collapsibleWidget");
+ addTagProvider(new CollapsibleWidgetLmlTagProvider(), "collapsible", "verticalCollapsible",
+ "collapsibleWidget");
addTagProvider(new ColorPickerLmlTagProvider(), "colorPicker");
addTagProvider(new DraggableLmlTagProvider(), "drag", "draggable");
addTagProvider(new DragPaneLmlTagProvider(), "dragPane");
@@ -240,6 +242,8 @@ protected void registerActorTags() {
addTagProvider(new FormValidatorLmlTagProvider(), "form", "formValidator", "formTable");
addTagProvider(new GridGroupLmlTagProvider(), "gridGroup", "grid");
addTagProvider(new HighlightTextAreaLmlTagProvider(), "highlightTextArea");
+ addTagProvider(new HorizontalCollapsibleWidgetLmlTagProvider(), "horizontalCollapsible",
+ "horizontalCollapsibleWidget");
addTagProvider(new HorizontalFlowGroupLmlTagProvider(), "horizontalFlow", "horizontalFlowGroup");
addTagProvider(new LinkLabelLmlTagProvider(), "linkLabel", "link");
addTagProvider(new ListViewLmlTagProvider(), "listView");
@@ -426,6 +430,7 @@ protected void registerWindowAttributes() {
/** CollapsibleWidget attributes. */
protected void registerCollapsibleWidgetAttributes() {
addAttributeProcessor(new CollapsedLmlAttribute(), "collapse", "collapsed");
+ addAttributeProcessor(new HorizontalCollapsedLmlAttribute(), "collapse", "collapsed");
}
/** ColorPicker attributes. */
diff --git a/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/attribute/collapsible/HorizontalCollapsedLmlAttribute.java b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/attribute/collapsible/HorizontalCollapsedLmlAttribute.java
new file mode 100644
index 00000000..774c4397
--- /dev/null
+++ b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/attribute/collapsible/HorizontalCollapsedLmlAttribute.java
@@ -0,0 +1,23 @@
+package com.github.czyzby.lml.vis.parser.impl.attribute.collapsible;
+
+import com.github.czyzby.lml.parser.LmlParser;
+import com.github.czyzby.lml.parser.tag.LmlAttribute;
+import com.github.czyzby.lml.parser.tag.LmlTag;
+import com.kotcrab.vis.ui.widget.HorizontalCollapsibleWidget;
+
+/** See {@link HorizontalCollapsibleWidget#setCollapsed(boolean, boolean)}. Invoked without collapsing animation.
+ * Mapped to "collapse", "collapsed".
+ *
+ * @author MJ */
+public class HorizontalCollapsedLmlAttribute implements LmlAttribute {
+ @Override
+ public Class getHandledType() {
+ return HorizontalCollapsibleWidget.class;
+ }
+
+ @Override
+ public void process(final LmlParser parser, final LmlTag tag, final HorizontalCollapsibleWidget actor,
+ final String rawAttributeData) {
+ actor.setCollapsed(parser.parseBoolean(rawAttributeData, actor), false); // false - no animation.
+ }
+}
diff --git a/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/CollapsibleWidgetLmlTag.java b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/CollapsibleWidgetLmlTag.java
index ee361107..a73f6edc 100644
--- a/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/CollapsibleWidgetLmlTag.java
+++ b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/CollapsibleWidgetLmlTag.java
@@ -12,7 +12,7 @@
/** Handles {@link CollapsibleWidget} actor. Can be used to manage one child. Converts text to a {@link Table} with a
* label child. If the child is not a table, will create an empty table and put the child actor in it. Mapped to
- * "collapsible", "collapsibleWidget".
+ * "collapsible", "verticalCollapsible", "collapsibleWidget".
*
* @author MJ */
public class CollapsibleWidgetLmlTag extends AbstractActorLmlTag {
diff --git a/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/HorizontalCollapsibleWidgetLmlTag.java b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/HorizontalCollapsibleWidgetLmlTag.java
new file mode 100644
index 00000000..5fb793b7
--- /dev/null
+++ b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/HorizontalCollapsibleWidgetLmlTag.java
@@ -0,0 +1,63 @@
+package com.github.czyzby.lml.vis.parser.impl.tag;
+
+import com.badlogic.gdx.scenes.scene2d.Actor;
+import com.badlogic.gdx.scenes.scene2d.ui.Table;
+import com.github.czyzby.kiwi.util.gdx.collection.GdxArrays;
+import com.github.czyzby.lml.parser.LmlParser;
+import com.github.czyzby.lml.parser.impl.tag.AbstractActorLmlTag;
+import com.github.czyzby.lml.parser.tag.LmlActorBuilder;
+import com.github.czyzby.lml.parser.tag.LmlTag;
+import com.kotcrab.vis.ui.widget.HorizontalCollapsibleWidget;
+import com.kotcrab.vis.ui.widget.VisTable;
+
+/** Handles {@link HorizontalCollapsibleWidget} actor. Can be used to manage one child. Converts text to a {@link Table}
+ * with a label child. If the child is not a table, will create an empty table and put the child actor in it. Mapped to
+ * "horizontalCollapsible", "horizontalCollapsibleWidget".
+ *
+ * @author MJ */
+public class HorizontalCollapsibleWidgetLmlTag extends AbstractActorLmlTag {
+ public HorizontalCollapsibleWidgetLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) {
+ super(parser, parentTag, rawTagData);
+ }
+
+ @Override
+ protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) {
+ return new HorizontalCollapsibleWidget();
+ }
+
+ @Override
+ protected void handlePlainTextLine(final String plainTextLine) {
+ addChild(wrapWithTable(toLabel(plainTextLine)));
+ }
+
+ /** @param actor will be put a table.
+ * @return a new table with 1 child. */
+ protected Table wrapWithTable(final Actor actor) {
+ final Table table = new VisTable();
+ table.add(actor);
+ return table;
+ }
+
+ @Override
+ protected void handleValidChild(final LmlTag childTag) {
+ if (childTag.getActor() instanceof Table) {
+ addChild((Table) childTag.getActor());
+ } else {
+ addChild(wrapWithTable(childTag.getActor()));
+ }
+ }
+
+ /** @param child will be set as collapsible's child. */
+ protected void addChild(final Table child) {
+ final HorizontalCollapsibleWidget container = getHorizontalCollapsibleWidget();
+ if (GdxArrays.isNotEmpty(container.getChildren())) {
+ getParser().throwErrorIfStrict("Horizontal collapsible widget can manage only one child.");
+ }
+ container.setTable(child);
+ }
+
+ /** @return casted actor. */
+ protected HorizontalCollapsibleWidget getHorizontalCollapsibleWidget() {
+ return (HorizontalCollapsibleWidget) getActor();
+ }
+}
diff --git a/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/provider/HorizontalCollapsibleWidgetLmlTagProvider.java b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/provider/HorizontalCollapsibleWidgetLmlTagProvider.java
new file mode 100644
index 00000000..fa1413b8
--- /dev/null
+++ b/lml-vis/src/main/java/com/github/czyzby/lml/vis/parser/impl/tag/provider/HorizontalCollapsibleWidgetLmlTagProvider.java
@@ -0,0 +1,15 @@
+package com.github.czyzby.lml.vis.parser.impl.tag.provider;
+
+import com.github.czyzby.lml.parser.LmlParser;
+import com.github.czyzby.lml.parser.tag.LmlTag;
+import com.github.czyzby.lml.parser.tag.LmlTagProvider;
+import com.github.czyzby.lml.vis.parser.impl.tag.HorizontalCollapsibleWidgetLmlTag;
+
+/** Provides Vis horizontal collapsible widget tags.
+ *
+ * @author MJ */
+public class HorizontalCollapsibleWidgetLmlTagProvider implements LmlTagProvider {
+ @Override public LmlTag create(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) {
+ return new HorizontalCollapsibleWidgetLmlTag(parser, parentTag, rawTagData);
+ }
+}