/******************************************************************************* * 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.BorderLayout; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import javax.swing.JPanel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.dcm4che3.data.Tag; import org.weasis.acquire.explorer.AcquireImageInfo; import org.weasis.acquire.explorer.core.bean.SeriesGroup; import org.weasis.acquire.explorer.gui.central.tumbnail.AcquireCentralTumbnailPane; import org.weasis.base.explorer.list.IThumbnailModel; import org.weasis.core.api.media.data.ImageElement; import org.weasis.dicom.codec.TagD; @SuppressWarnings("serial") public class AcquireCentralImagePanel extends JPanel implements ListSelectionListener { private final AcquireCentralTumbnailPane<ImageElement> imageListPane; private final AcquireCentralInfoPanel imageInfo; public AcquireCentralImagePanel(AcquireTabPanel acquireTabPanel) { setLayout(new BorderLayout()); this.imageInfo = new AcquireCentralInfoPanel(null); this.imageListPane = new AcquireCentralTumbnailPane<>(new ArrayList<ImageElement>()); imageListPane.setAcquireTabPanel(Objects.requireNonNull(acquireTabPanel)); imageListPane.addListSelectionListener(this); add(imageListPane, BorderLayout.CENTER); add(imageInfo, BorderLayout.SOUTH); } public void getCurrentSerie(SeriesGroup newSerie) { imageInfo.setSerie(newSerie); } public void setSeriesGroup(SeriesGroup seriesGroup, List<AcquireImageInfo> imageInfos) { imageInfo.setSerie(seriesGroup); List<ImageElement> list = imageInfos == null ? null : toImageElement(imageInfos); imageListPane.setList(list); } private List<ImageElement> toImageElement(List<AcquireImageInfo> list) { return list.stream().map(e -> e.getImage()) .sorted(Comparator.comparing(i -> TagD.dateTime(Tag.ContentDate, Tag.ContentTime, i))) .collect(Collectors.toList()); } public void addImagesInfo(List<AcquireImageInfo> imageInfos) { List<ImageElement> list = imageInfos == null ? null : toImageElement(imageInfos); imageListPane.addElements(list); } public void updateList(List<AcquireImageInfo> imageInfos) { List<ImageElement> list = imageInfos == null ? null : toImageElement(imageInfos); imageListPane.setList(list); } public void updateSerie(SeriesGroup newSerie) { imageInfo.setSerie(newSerie); } public IThumbnailModel<ImageElement> getFileListModel() { return imageListPane.getFileListModel(); } public boolean containsImageElement(ImageElement image) { return getFileListModel().contains(image); } public void removeElement(ImageElement image) { getFileListModel().removeElement(image); } public void removeElements(List<ImageElement> medias) { IThumbnailModel<ImageElement> model = getFileListModel(); medias.forEach(model::removeElement); } public void clearAll() { getFileListModel().clear(); imageListPane.repaintList(); } public boolean isEmpty() { return getFileListModel().isEmpty(); } protected void refreshGUI() { imageListPane.repaintList(); imageListPane.revalidate(); imageListPane.repaint(); refreshInfoGUI(); } protected void refreshInfoGUI() { imageInfo.refreshGUI(); } @Override public void valueChanged(ListSelectionEvent e) { List<ImageElement> images = imageListPane.getSelectedValuesList(); if (images.size() == 1) { imageInfo.setImage(images.get(0)); } else { imageInfo.setImage(null); } } }