/*******************************************************************************
* Copyright (c) MOBAC developers
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package mobac.program.model;
import java.io.OutputStream;
import java.util.ArrayList;
import javax.swing.JComboBox;
import mobac.gui.MainGUI;
import mobac.program.interfaces.TileImageDataWriter;
import mobac.program.tiledatawriter.TileImageJpegDataWriter;
import mobac.program.tiledatawriter.TileImagePng4DataWriter;
import mobac.program.tiledatawriter.TileImagePng8DataWriter;
import mobac.program.tiledatawriter.TileImagePngDataWriter;
import mobac.utilities.I18nUtils;
/**
* Defines all available image formats selectable in the {@link JComboBox} in the {@link MainGUI}. Each element of this
* enumeration contains one instance of an {@link TileImageDataWriter} instance that can perform one or more image
* operations (e.g. color reduction) and then saves the image to an {@link OutputStream}.
*
* @see TileImageDataWriter
* @see TileImagePngDataWriter
* @see TileImagePng4DataWriter
* @see TileImagePng8DataWriter
* @see TileImageJpegDataWriter
*/
public enum TileImageFormat {
// PNG("PNG", new TileImagePngDataWriter()), //
// PNG8Bit(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_png_8bit"), new TileImagePng8DataWriter()), //
// PNG4Bit(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_png_4bit"), new TileImagePng4DataWriter()), //
// JPEG100(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q100"), new TileImageJpegDataWriter(1.00)), //
// JPEG99(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q99"), new TileImageJpegDataWriter(0.99)), //
// JPEG95(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q100"), new TileImageJpegDataWriter(0.95)), //
// JPEG90(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q90"), new TileImageJpegDataWriter(0.90)), //
// JPEG85(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q85"), new TileImageJpegDataWriter(0.85)), //
// JPEG80(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q80"), new TileImageJpegDataWriter(0.80)), //
// JPEG70(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q70"), new TileImageJpegDataWriter(0.70)), //
// JPEG60(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q60"), new TileImageJpegDataWriter(0.60)), //
// JPEG50(MainGUI.localizedStringForKey("lp_tile_param_image_fmt_jpg_q50"), new TileImageJpegDataWriter(0.50)); //
PNG(new TileImagePngDataWriter(), "lp_tile_param_image_fmt_png"), //
PNG8Bit(new TileImagePng8DataWriter(), "lp_tile_param_image_fmt_png_8bit"), //
PNG4Bit(new TileImagePng4DataWriter(), "lp_tile_param_image_fmt_png_4bit"), //
JPEG100(new TileImageJpegDataWriter(1.00), "lp_tile_param_image_fmt_jpg_q100"), //
JPEG99(new TileImageJpegDataWriter(0.99), "lp_tile_param_image_fmt_jpg_q99"), //
JPEG95(new TileImageJpegDataWriter(0.95), "lp_tile_param_image_fmt_jpg_q95"), //
JPEG90(new TileImageJpegDataWriter(0.90), "lp_tile_param_image_fmt_jpg_q90"), //
JPEG85(new TileImageJpegDataWriter(0.85), "lp_tile_param_image_fmt_jpg_q85"), //
JPEG80(new TileImageJpegDataWriter(0.80), "lp_tile_param_image_fmt_jpg_q80"), //
JPEG70(new TileImageJpegDataWriter(0.70), "lp_tile_param_image_fmt_jpg_q70"), //
JPEG60(new TileImageJpegDataWriter(0.60), "lp_tile_param_image_fmt_jpg_q60"), //
JPEG50(new TileImageJpegDataWriter(0.50), "lp_tile_param_image_fmt_jpg_q50"); //
// private final String description;
private final TileImageDataWriter dataWriter;
private final String translationKey;
private TileImageFormat(TileImageDataWriter dataWriter, String translationKey) {
// this.description = description;
this.dataWriter = dataWriter;
this.translationKey = translationKey;
}
@Override
public String toString() {
return I18nUtils.localizedStringForKey(translationKey);
}
public TileImageDataWriter getDataWriter() {
return dataWriter;
}
public TileImageType getType() {
return dataWriter.getType();
}
/**
* File extension
*
* @return
*/
public String getFileExt() {
return dataWriter.getType().getFileExt();
}
public static TileImageFormat[] getPngFormats() {
return getFormats(TileImageType.PNG);
}
public static TileImageFormat[] getJpgFormats() {
return getFormats(TileImageType.JPG);
}
protected static TileImageFormat[] getFormats(TileImageType tileImageType) {
ArrayList<TileImageFormat> list = new ArrayList<TileImageFormat>();
for (TileImageFormat format : values()) {
if (tileImageType.equals(format.getType()))
list.add(format);
}
TileImageFormat[] result = new TileImageFormat[0];
result = list.toArray(result);
return result;
}
}