package qls.gui.structure; import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import javax.swing.JTabbedPane; import ql.Value; import ql.ast.expression.Identifier; import ql.gui.Component; import qls.ast.visitor.domaincreator.ConditionalDomain; public class TabbedPanel implements Component { private Identifier identifier; private JTabbedPane tabbedPanel; private List<ConditionalDomain> domains; private List<Component> pages; private Component handler; public TabbedPanel(Identifier identifier, List<ConditionalDomain> domains) { tabbedPanel = new JTabbedPane(); pages = new ArrayList<Component>(); this.identifier = identifier; this.domains = domains; } public void addPage(Component page) { pages.add(page); tabbedPanel.addTab(page.toString(), page.getComponent()); page.setHandler(this); updateComponent(); } public void setPages(List<Component> pages) { tabbedPanel.removeAll(); this.pages = new ArrayList<Component>(pages); this.pages.stream().forEach(page -> tabbedPanel.addTab(page.toString(), page.getComponent())); this.pages.stream().forEach(page -> page.setHandler(this)); updateComponent(); } @Override public void setHandler(Component handler) { this.handler = handler; } @Override public void handleChange(Value changedValue, Component source) { if(handler != null) { handler.handleChange(changedValue, source); } else { updateComponent(); } } @Override public void updateComponent() { domains.stream().forEach(domain -> domain.updateDomain()); pages.stream().forEach(page -> page.updateComponent()); } @Override public JComponent getComponent() { return tabbedPanel; } @Override public String toString() { return identifier.toString(); } }