/*
* Copyright (c) 2014 tabletoptool.com team.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* rptools.com team - initial implementation
* tabletoptool.com team - further development
*/
package com.t3.client.ui;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Image;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import com.t3.client.AppPreferences;
import com.t3.client.AppUtil;
import com.t3.image.ThumbnailManager;
/*
* A File chooser with an image preview panel
*/
public class PreviewPanelFileChooser extends JFileChooser {
private JPanel previewWrapperPanel;
private ImagePreviewPanel browsePreviewPanel;
private ThumbnailManager thumbnailManager = new ThumbnailManager(AppUtil.getAppHome("previewPanelThumbs"), new Dimension(150, 150));
public PreviewPanelFileChooser() {
this.setCurrentDirectory(AppPreferences.getLoadDir());
this.setAccessory(getPreviewWrapperPanel());
this.addPropertyChangeListener(PreviewPanelFileChooser.SELECTED_FILE_CHANGED_PROPERTY,
new FileSystemSelectionHandler());
}
private class FileSystemSelectionHandler implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
File previewFile = getImageFileOfSelectedFile();
if (previewFile != null && !previewFile.isDirectory()) {
try {
Image img = thumbnailManager.getThumbnail(previewFile);
getPreviewPanel().setImage(img);
} catch (IOException ioe) {
getPreviewPanel().setImage(null);
}
} else {
getPreviewPanel().setImage(null);
}
}
}
//Override if selected file is not also the image
protected File getImageFileOfSelectedFile() {
return getSelectedFile();
}
public Image getSelectedThumbnailImage() {
return browsePreviewPanel.getImage();
}
private JPanel getPreviewWrapperPanel() {
if (previewWrapperPanel == null) {
GridLayout gridLayout = new GridLayout();
gridLayout.setRows(1);
gridLayout.setColumns(1);
previewWrapperPanel = new JPanel();
previewWrapperPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(0, 5, 0, 0), BorderFactory
.createTitledBorder(null, "Preview",
TitledBorder.CENTER,
TitledBorder.BELOW_BOTTOM, null, null)));
previewWrapperPanel.setLayout(gridLayout);
previewWrapperPanel.add(getPreviewPanel(), null);
}
return previewWrapperPanel;
}
private ImagePreviewPanel getPreviewPanel() {
if (browsePreviewPanel == null) {
browsePreviewPanel = new ImagePreviewPanel();
}
return browsePreviewPanel;
}
}