package com.github.czyzby.lml.vis.parser.impl.attribute.listview;
import com.github.czyzby.lml.parser.LmlParser;
import com.github.czyzby.lml.parser.action.ActorConsumer;
import com.github.czyzby.lml.parser.tag.LmlTag;
import com.kotcrab.vis.ui.widget.ListView;
import com.kotcrab.vis.ui.widget.ListView.ItemClickListener;
import com.kotcrab.vis.ui.widget.ListView.ListViewTable;
/** See {@link ListView#setItemClickListener(ItemClickListener)}. Expects ID of an action (method invocation marker is
* optional) consuming an Object, which will represent an item in the list view. Mapped to "itemListener",
* "itemClickListener".
*
* @author MJ */
public class ItemClickListenerLmlAttribute extends ListViewLmlAttribute {
@Override
@SuppressWarnings("unchecked")
protected void process(final LmlParser parser, final LmlTag tag, final ListViewTable<?> mainTable,
final ListView<?> listView, final String rawAttributeData) {
final ActorConsumer<?, Object> listener = parser.parseAction(rawAttributeData);
if (listener == null) {
parser.throwError("Invalid action ID: " + rawAttributeData
+ ". Expected an action reference for item click listener, found no fitting action.");
}
((ListView<Object>) listView).setItemClickListener(new ItemClickListener<Object>() {
@Override
public void clicked(final Object item) {
listener.consume(item);
}
});
}
}