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); + } +}