/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.studio.components.map.plugins.snapshot;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Window;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.apache.commons.io.FilenameUtils;
import com.opendoorlogistics.core.utils.strings.Strings;
import com.opendoorlogistics.core.utils.ui.FileBrowserPanel;
import com.opendoorlogistics.core.utils.ui.OkCancelDialog;
import com.opendoorlogistics.core.utils.ui.ShowPanel;
import com.opendoorlogistics.studio.components.map.plugins.snapshot.CreateImageConfig.ImageType;
import com.opendoorlogistics.api.ui.UIFactory.FilenameChangeListener;
final public class ExportImagePanel extends CreateImagePanel {
private final ExportImageConfig config;
private final FileBrowserPanel fileBrowser;
private ExportImagePanel(Dimension defaultSize) {
this(new ExportImageConfig(), defaultSize);
}
private ExportImagePanel(ExportImageConfig inputConfig, Dimension defaultSize) {
super(inputConfig, defaultSize);
this.config = inputConfig;
addCheckBox("Save to clipboard", config.isToClipboard(), new CheckChangedListener() {
@Override
public void checkChanged(boolean isChecked) {
ExportImagePanel.this.config.setToClipboard(isChecked);
}
});
addCheckBox("Save to file", config.isToFile(), new CheckChangedListener() {
@Override
public void checkChanged(boolean isChecked) {
ExportImagePanel.this.config.setToFile(isChecked);
// updateAppearance();
}
});
addCheckBox("Show viewer", config.isToViewer(), new CheckChangedListener() {
@Override
public void checkChanged(boolean isChecked) {
ExportImagePanel.this.config.setToViewer(isChecked);
// updateAppearance();
}
});
FileNameExtensionFilter [] filters = new FileNameExtensionFilter[ImageType.values().length];
for(int i =0 ; i<filters.length ; i++){
ImageType type = ImageType.values()[i];
filters[i]= new FileNameExtensionFilter("Image file (" + type.name().toLowerCase() + ")", type.name().toLowerCase());
}
fileBrowser = new FileBrowserPanel(this.config.getFilename(), new FilenameChangeListener() {
@Override
public void filenameChanged(String newFilename) {
ExportImagePanel.this.config.setFilename(newFilename);
String ext = FilenameUtils.getExtension(newFilename);
for(ImageType type : ImageType.values()){
if(Strings.equalsStd(ext, type.name())){
imageTypeCombo.getComboBox().setSelectedItem(type);
config.setImageType(type);
break;
}
}
}
},false, "Select file", filters);
add(fileBrowser);
validateFilename();
}
public ExportImageConfig getConfig() {
return config;
}
public static void main(String [] args){
ShowPanel.showPanel(new ExportImagePanel(new Dimension(200, 400) ));
}
@Override
protected void onImageTypeChanged(){
validateFilename();
}
protected void validateFilename(){
String filename = config.getFilename();
if(filename.length()>0 && config.getImageType()!=null){
// ImageType type = config.getImageType();
if(config.getImageType()!=null){
String ext = FilenameUtils.getExtension(filename);
if(Strings.equalsStd(ext, config.getImageType().name())==false){
filename = FilenameUtils.removeExtension(filename);
filename += "." + config.getImageType().name().toLowerCase();
fileBrowser.setFilename(filename);
config.setFilename(filename);
}
}
}
}
private static ExportImageConfig showModal(Window ancestor ,Component directParent, ExportImageConfig inputConfig, Dimension defaultSize){
final ExportImagePanel panel = new ExportImagePanel(inputConfig!=null?inputConfig.deepCopy():new ExportImageConfig(), defaultSize);
OkCancelDialog dlg = new OkCancelDialog(ancestor){
@Override
protected Component createMainComponent(boolean inWindowsBuilder){
return panel;
}
};
dlg.setTitle("Export image");
if(directParent!=null){
dlg.setLocationRelativeTo(ancestor);
}
else if(panel!=null){
dlg.setLocationRelativeTo(ancestor);
}
if(dlg.showModal() == OkCancelDialog.OK_OPTION){
return panel.getConfig();
}
return null;
}
// public static CreateImageConfig showModal(Window parent , ExportImageConfig inputConfig){
// return showModal(parent, null, inputConfig);
// }
public static ExportImageConfig showModal(Component parent , ExportImageConfig inputConfig, Dimension defaultSize){
return showModal(parent!=null ? SwingUtilities.getWindowAncestor(parent):null, parent, inputConfig, defaultSize);
}
}