/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.acquire.explorer.gui.central;
import java.awt.Dimension;
import java.util.Optional;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import org.weasis.acquire.explorer.core.bean.SeriesGroup;
@SuppressWarnings("serial")
public class SerieButtonList extends JScrollPane {
private static final JPanel serieButtonPane = new JPanel();
private SortedSet<SerieButton> serieButtonSet = new TreeSet<>();
public SerieButtonList() {
super(serieButtonPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
serieButtonPane.setLayout(new BoxLayout(serieButtonPane, BoxLayout.Y_AXIS));
}
public void addButton(SerieButton btn) {
Dimension dim = btn.getPreferredSize();
dim.width = 210;
btn.setPreferredSize(dim);
dim = btn.getMaximumSize();
dim.width = 210;
btn.setMaximumSize(dim);
serieButtonSet.add(btn);
int index = serieButtonSet.headSet(btn).size();
serieButtonPane.add(btn, index);
}
public Optional<SerieButton> getButton(final SeriesGroup seriesGroup) {
return serieButtonSet.stream().filter(sb -> sb.getSerie().equals(seriesGroup)).findAny();
}
public Set<SerieButton> getButtons() {
return serieButtonSet;
}
private void remove(SerieButton btn) {
if (serieButtonSet.remove(btn)) {
serieButtonPane.remove(btn);
}
}
public Optional<SerieButton> getFirstSerieButton() {
return serieButtonSet.stream().sorted().findFirst();
}
public void removeBySerie(final SeriesGroup seriesGroup) {
serieButtonSet.stream().filter(sb -> sb.getSerie().equals(seriesGroup)).findFirst().ifPresent(this::remove);
}
protected void refreshGUI() {
revalidate();
repaint();
}
}