package com.vaadin.addon.spreadsheet; import com.vaadin.addon.spreadsheet.SheetOverlayWrapper.OverlayChangeListener; import com.vaadin.server.FontAwesome; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; import com.vaadin.ui.themes.ValoTheme; @SuppressWarnings("serial") class MinimizableComponentContainer extends CssLayout { private Component content; private final Button minimizeButton; private OverlayChangeListener listener; public MinimizableComponentContainer(Component comp) { this.content = comp; this.minimizeButton = createMinimizeButton(); this.addComponents(minimizeButton, content); } public MinimizableComponentContainer() { this.minimizeButton = createMinimizeButton(); this.addComponent(minimizeButton); } private Button createMinimizeButton() { final Button minimizeButton = new Button(FontAwesome.MINUS); minimizeButton.setStyleName(ValoTheme.BUTTON_LINK); minimizeButton.addStyleName("minimize-button"); minimizeButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { content.setVisible(!content.isVisible()); if (content.isVisible()) { minimizeButton.setIcon(FontAwesome.MINUS); } else { minimizeButton.setIcon(FontAwesome.PLUS); } fireMinimizeEvent(); } }); return minimizeButton; } public boolean isMinimized() { return !content.isVisible(); } public void setMinimizeListener(OverlayChangeListener listener) { this.listener = listener; } public void fireMinimizeEvent() { listener.overlayChanged(); } public void setContent(Component newContent) { if (content != null) replaceComponent(content, newContent); else addComponent(newContent); content = newContent; } public Component getContent() { return content; } }