package com.talosvfx.talos.editor.addons.bvb; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; import com.talosvfx.talos.editor.widgets.propertyWidgets.IPropertyProvider; import java.util.Comparator; public class PropertyPanelContainer extends Table { Table container; Table fakeContainer; ScrollPane scrollPane; ObjectMap<Class, IPropertyProvider> providerSet = new ObjectMap<>(); Array<PropertiesPanel> panelList = new Array<>(); public PropertyPanelContainer(Skin skin) { setSkin(skin); container = new Table(); fakeContainer = new Table(); scrollPane = new ScrollPane(fakeContainer); add(scrollPane).grow(); fakeContainer.add(container).growX().row(); fakeContainer.add().expandY(); } public void showPanel(IPropertyProvider propertyProvider) { providerSet.put(propertyProvider.getClass(), propertyProvider); build(); } public void build() { container.clear(); Array<IPropertyProvider> list = new Array<>(); for(IPropertyProvider provider: providerSet.values()) { list.add(provider); } list.sort(new Comparator<IPropertyProvider>() { @Override public int compare(IPropertyProvider o1, IPropertyProvider o2) { return o1.getPriority()-o2.getPriority(); } }); panelList.clear(); for(IPropertyProvider provider: list) { PropertiesPanel panel = new PropertiesPanel(provider, getSkin()); container.add(panel).growX().top().padBottom(5); container.row(); panelList.add(panel); } } public void hidePanel(IPropertyProvider propertyProvider) { if(propertyProvider == null) return; providerSet.remove(propertyProvider.getClass()); build(); } public void updateValues() { for(PropertiesPanel panel: panelList) { panel.updateValues(); } } public void cleanPanels() { providerSet.clear(); panelList.clear(); } }