package controller.subcontroller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.ChangeTagDataModel;
import model.structure.ID3TagData;
import model.util.Util;
import model.util.WindowUtils;
import view.subview.id3.ChangeTagDataView;
import com.cf.structures.DataDouble;
import controller.interfaces.ICmdChangeID3Data;
public class ChangeTagDataController extends Observable implements ActionListener, MouseListener {
/**
* the logger
*/
private final Logger logger = Logger.getLogger(this.getClass().getName());
/**
* the model
*/
private ChangeTagDataModel model;
/**
* the window
*/
private ChangeTagDataView window;
/**
* the close command which is called after closing the window
*/
private ICmdChangeID3Data closeCommand;
/**
* Constructor
*/
public ChangeTagDataController() {
model = new ChangeTagDataModel();
}
/**
* sets the close command
*
* @param cmd
* the command
*/
public void setCloseCmd(ICmdChangeID3Data cmd) {
this.closeCommand = cmd;
}
/**
* creates the window
*
* @param data
* data list which maps the old data to the new data
*/
public void createWindow(List<DataDouble<ID3TagData, ID3TagData>> data) {
model.setCurrIndex(-1);
model.setAudioFiles(data);
if (model.isDone())
return;
window = new ChangeTagDataView();
window.init();
window.setVisible(true);
window.setActionListener(this);
window.setMouseListener(this);
this.window.setLocation(WindowUtils.getCenteredWindowCoordinates(this.window));
window.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
closeWindow(null);
}
});
Util.sleep(300);
nextButtonPressed();
}
/**
* closes the window
*
* @param data
* the new id3 data which will be given to the id3 controller,
* null if window is just closed
*/
public void closeWindow(List<ID3TagData> data) {
window.dispose();
closeCommand.call(data);
}
/*
* (non-Javadoc)
*
* @see
* java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("nextTagB"))
nextButtonPressed();
else if (e.getActionCommand().equals("selectAllChB"))
selectAllPressed();
}
/**
* next button pressed
*/
private void nextButtonPressed() {
// save data
logger.log(Level.FINER, "next button pressed.");
model.createNewID3TagData(window.getChangedData());
model.incrementIndex();
if (model.isDone()) {
List<ID3TagData> data = model.getNewAudioFiles();
model.setCurrIndex(-1);
closeWindow(data);
return;
}
if (window.isRepeatSelected()) {
nextButtonPressed();
return;
}
window.setCounter(model.getCurrIndex() + 1, model.getListSize());
window.setCurrentData(model.getCurrID3TagData());
window.setNewData(model.getNewID3TagData());
window.setCheckBoxes(model.getChanged());
window.fixSize();
}
/**
* select all checkbox pressed
*/
private void selectAllPressed() {
logger.log(Level.FINER, "Select all selected: " + window.isSelectAll());
if (window.isSelectAll())
window.setCheckBoxes(true);
else
window.setCheckBoxes(false);
}
/*
* (non-Javadoc)
*
* @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
*/
@Override
public void mouseClicked(MouseEvent e) {
logger.log(Level.FINER, "Help button pressed.");
window.openHelpDialog();
}
/*
* (non-Javadoc)
*
* @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
*/
@Override
public void mouseEntered(MouseEvent arg0) {
// unused
}
/*
* (non-Javadoc)
*
* @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
*/
@Override
public void mouseExited(MouseEvent arg0) {
// unused
}
/*
* (non-Javadoc)
*
* @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
*/
@Override
public void mousePressed(MouseEvent arg0) {
// unused
}
/*
* (non-Javadoc)
*
* @see
* java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
*/
@Override
public void mouseReleased(MouseEvent arg0) {
// unused
}
}