package view.subview.id3;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import view.structure.ImagePanel;
import model.structure.ID3ImageData;
import model.util.Graphics;
import net.miginfocom.swing.MigLayout;
import com.cf.mls.MLS;
import config.Config;
import config.Constants;
public class ChangeImageDataView extends JFrame {
/**
*
*/
private static final long serialVersionUID = 6895063590922886791L;
/**
* the multi language supporter
*/
private MLS mls;
private JPanel contentPane;
private ImagePanel currIP;
private ImagePanel newIP;
private JCheckBox imageChB;
private JCheckBox repeatChB;
private JLabel newExtensionJL;
private JLabel sizeCurrJL;
private JLabel sizeNewJL;
private JLabel currSizeJL;
private JLabel extNewJL;
private JLabel newSizeJL;
private JLabel currDimJL;
private JLabel extCurrJL;
private JLabel currExtensionJL;
private JLabel dimNewJL;
private JLabel newDimJL;
private JLabel dimCurrJL;
private JLabel counterJL;
private JLabel artistJL;
private JPanel tagP;
private JButton nextTagB;
/**
* Constructor
*/
public ChangeImageDataView() {
mls = new MLS("view/languageFiles/ChangeImageDataView", Config.getInstance().getCurrentLanguage());
mls.setToolTipDuration(-1);
}
/**
* inits the window
*/
public void init() {
mls.addJFrame("window", this);
contentPane = new JPanel();
tagP = mls.generateTitledBevelPanel("tagP", BevelBorder.LOWERED, true);
currIP = new ImagePanel(null);
mls.addCustomJPanel(currIP, "currIP");
newIP = new ImagePanel(null);
mls.addCustomJPanel(newIP, "newIP");
imageChB = mls.generateJCheckBox("imageChB", true, false, null);
repeatChB = mls.generateJCheckBox("repeatChB", true, false, null);
newExtensionJL = mls.generateJLabel("newExtensionJL", true);
sizeCurrJL = mls.generateJLabel("sizeCurrJL", true);
sizeNewJL = mls.generateJLabel("sizeNewJL", true);
currSizeJL = mls.generateJLabel("currSizeJL", true);
extNewJL = mls.generateJLabel("extNewJL", true);
newSizeJL = mls.generateJLabel("newSizeJL", true);
currDimJL = mls.generateJLabel("currDimJL", true);
extCurrJL = mls.generateJLabel("extCurrJL", true);
currExtensionJL = mls.generateJLabel("currExtensionJL", true);
dimNewJL = mls.generateJLabel("dimNewJL", true);
newDimJL = mls.generateJLabel("newDimJL", true);
dimCurrJL = mls.generateJLabel("dimCurrJL", true);
counterJL = mls.generateJLabel("counterJL", true);
artistJL = mls.generateJLabel("artistJL", true);
nextTagB = mls.generateJButton("nextTagB", true, null);
setContentPane(contentPane);
tagP.setLayout(new MigLayout("insets 5", "[shrink][shrink][shrink][shrink]", "[shrink][shrink]"));
tagP.add(artistJL, "push, center, span 4, gapbottom 15, wrap");
tagP.add(currIP, "height :300:, width :300:");
currIP.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
tagP.add(new ImagePanel(Constants.RIGHT_ARROW), "height 20!, width 20!, gapleft 15");
tagP.add(newIP, "gapleft 15, height :300:, width :300:");
newIP.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
tagP.add(imageChB, "wrap, gapleft 15");
JPanel currDataP = new JPanel(new MigLayout("insets 0"));
currDataP.add(dimCurrJL);
currDataP.add(currDimJL, "wrap");
currDataP.add(sizeCurrJL);
currDataP.add(currSizeJL, "wrap");
currDataP.add(extCurrJL);
currDataP.add(currExtensionJL);
JPanel newDataP = new JPanel(new MigLayout("insets 0"));
newDataP.add(dimNewJL);
newDataP.add(newDimJL, "wrap");
newDataP.add(sizeNewJL);
newDataP.add(newSizeJL, "wrap");
newDataP.add(extNewJL);
newDataP.add(newExtensionJL);
tagP.add(currDataP, "gaptop 7");
tagP.add(new JLabel());
tagP.add(newDataP, "gapleft 15, gaptop 7, wrap");
tagP.add(counterJL, "push, center, span 4, gaptop 15");
JPanel btnP = new JPanel(new MigLayout("insets 0"));
btnP.add(repeatChB, "left");
btnP.add(nextTagB, "push, right, gapright 2");
contentPane.setLayout(new MigLayout("insets 7", "[grow]", "[grow][shrink]"));
contentPane.add(tagP, "wrap");
contentPane.add(btnP, "grow");
pack();
}
/**
* sets an ActionListener
*
* @param l
* the ActionListener
*/
public void setActionListener(ActionListener l) {
nextTagB.addActionListener(l);
}
public boolean isRepeatSelected() {
return this.repeatChB.isSelected();
}
/**
* shows a given message
*
* @param identifier
* identifier for the mls
*/
public void showMessage(String identifier) {
JOptionPane.showMessageDialog(this, mls.getMessage(identifier));
}
/**
* converts the given number of bytes to KB
*
* @param bytes
* number of bytes
*
* @return given bytes in KB
*/
private String convertSizeInKB(long bytes) {
// to KB
double result = ((double) bytes) / 1024.0;
return Double.toString(Math.floor((result * 100)) / 100);
}
/**
* sets the current image
*
* @param data
* the current image data
*
* @throws IOException
* thrown if image couldn't be loaded
*/
public void setCurrImage(ID3ImageData data) throws IOException {
// convert byte array back to BufferedImage
BufferedImage img;
if (data.getImage() == null || data.getImage().length == 0) {
img = Constants.EMPTY;
// set dimension + extension
this.currDimJL.setText(mls.getMessage("currDimJL"));
this.currExtensionJL.setText(mls.getMessage("currExtensionJL"));
this.currSizeJL.setText(mls.getMessage("currSizeJL"));
} else {
InputStream in = new ByteArrayInputStream(data.getImage());
img = ImageIO.read(in);
in.close();
// set dimension + extension
this.currDimJL.setText(img.getWidth() + "x" + img.getHeight());
this.currExtensionJL.setText("*." + data.getExtension());
long size = data.getImage().length;
this.currSizeJL.setText(convertSizeInKB(size) + " KB");
}
img = Graphics.scale(img, this.currIP.getWidth(), this.currIP.getHeight());
this.currIP.setImage(img);
}
/**
* sets the new image
*
* @param data
* the new image data
*
* @throws IOException
* thrown if the image couldn't be loaded
*/
public void setNewImage(ID3ImageData data) throws IOException {
// convert byte array back to BufferedImage
BufferedImage img;
if (data.getImage() == null || data.getImage().length == 0) {
img = Constants.EMPTY;
// set dimension + extension
this.newDimJL.setText(mls.getMessage("newDimJL"));
this.newExtensionJL.setText(mls.getMessage("newExtensionJL"));
this.newSizeJL.setText(mls.getMessage("newSizeJL"));
this.imageChB.setSelected(false);
} else {
InputStream in = new ByteArrayInputStream(data.getImage());
img = ImageIO.read(in);
in.close();
// set dimension + extension
this.newDimJL.setText(img.getWidth() + "x" + img.getHeight());
this.newExtensionJL.setText("*." + data.getExtension());
long size = data.getImage().length;
this.newSizeJL.setText(convertSizeInKB(size) + " KB");
this.imageChB.setSelected(true);
}
img = Graphics.scale(img, this.newIP.getWidth(), this.newIP.getHeight());
this.newIP.setImage(img);
}
/**
* sets the current counter
*
* @param curr
* current count
* @param of
* max count
*/
public void setCounter(int curr, int of) {
if (curr < 0 && of < 1)
return;
this.counterJL.setText(curr + "/" + of);
}
public boolean getImageChB() {
return this.imageChB.isSelected();
}
/**
* sets the artist and title label
*
* @param artist
* the artist
* @param title
* the title
*/
public void setArtist(String artist, String title) {
this.artistJL.setText(artist + " - " + title);
}
}