package moviescraper.doctord.view;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractListModel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import moviescraper.doctord.controller.EditGenresAction;
import moviescraper.doctord.controller.EditTagsAction;
import moviescraper.doctord.model.Movie;
import moviescraper.doctord.model.dataitem.Actor;
import moviescraper.doctord.model.dataitem.Genre;
import moviescraper.doctord.model.dataitem.ID;
import moviescraper.doctord.model.dataitem.OriginalTitle;
import moviescraper.doctord.model.dataitem.Plot;
import moviescraper.doctord.model.dataitem.ReleaseDate;
import moviescraper.doctord.model.dataitem.Set;
import moviescraper.doctord.model.dataitem.Studio;
import moviescraper.doctord.model.dataitem.Tag;
import moviescraper.doctord.model.dataitem.Title;
import moviescraper.doctord.model.dataitem.Year;
import moviescraper.doctord.model.preferences.MoviescraperPreferences;
import moviescraper.doctord.view.AbstractFileDetailPanelEditGUI.Operation;
import moviescraper.doctord.view.renderer.ActressListRenderer;
import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
public class FileDetailPanel extends JPanel {
private static final String NO_FILE_SELECTED = "No File Selected";
private static final long serialVersionUID = 7088761619568387476L;
private JTextField txtFieldMovieTitleText;
private JTextField txtFieldOriginalTitleText;
private JTextField txtFieldScrapedYearText;
private JTextField txtFieldIDCurrentMovie;
private JTextField txtFieldStudio;
private JTextField txtFieldMovieSet;
private JTextArea moviePlotTextField;
private JList<Actor> actorList;
private JTextField genreList;
private JTextField tagList;
protected Movie currentMovie = getEmptyMovie();
MoviescraperPreferences preferences;
private ArtWorkPanel artWorkPanel;
private final static int DEFAULT_TEXTFIELD_LENGTH = 35;
public GUIMain guiMain;
public int currentListIndexOfDisplayedMovie = 0;
private JTextField txtFieldReleaseDateText;
private static final int COLUMN_LABEL = 2;
private static final int COLUMN_FORM_FIELD = 4;
private static final int COLUMN_ARTWORK_PANEL = 6;
private static final int ROW_CHANGE_MOVIE_BUTTONS = 2;
private static final int ROW_ARTWORK_PANEL = 2;
private static final int ROW_FILE_PATH = 4;
private static final int ROW_TITLE = 6;
private static final int ROW_ORIGINAL_TITLE = 8;
private static final int ROW_YEAR = 10;
private static final int ROW_RELEASE_DATE = 12;
private static final int ROW_ID = 14;
private static final int ROW_STUDIO = 16;
private static final int ROW_MOVIE_SET = 18;
private static final int ROW_PLOT = 20;
private static final int ROW_GENRES = 22;
private static final int ROW_TAGS = 24;
private static final int ROW_ACTORS = 26;
private JButton previousMovieButton;
private JButton nextMovieButton;
private JTextField pathTextField;
private JLabel numberInListSelectedLabel;
/**
* Create the panel.
*/
public FileDetailPanel(MoviescraperPreferences preferences, GUIMain gui) {
this.preferences = preferences;
this.guiMain = gui;
JPanel fileDetailsPanel = this;
FormLayout formLayout = new FormLayout(new ColumnSpec[] {
FormFactory.RELATED_GAP_COLSPEC, // 1 - empty space
FormFactory.DEFAULT_COLSPEC, //2 - label for each of the form items
FormFactory.RELATED_GAP_COLSPEC,//3 - empty space
ColumnSpec.decode("fill:pref:grow"), // 4 - Form text items
FormFactory.RELATED_GAP_COLSPEC,//5 - empty space
FormFactory.DEFAULT_COLSPEC,// 6 - artwork panel
FormFactory.RELATED_GAP_COLSPEC,//7 - empty space
},
new RowSpec[] {
FormFactory.RELATED_GAP_ROWSPEC, //1 - empty space
FormFactory.DEFAULT_ROWSPEC, //2 - navigation buttons and artwork panel
FormFactory.RELATED_GAP_ROWSPEC, //3 - empty space
FormFactory.DEFAULT_ROWSPEC, //4 - File Path
FormFactory.RELATED_GAP_ROWSPEC, //5 - empty space
FormFactory.DEFAULT_ROWSPEC, //6 - Title
FormFactory.RELATED_GAP_ROWSPEC,//7 - empty space
FormFactory.DEFAULT_ROWSPEC,//8 - original title
FormFactory.RELATED_GAP_ROWSPEC,//9 - empty space
FormFactory.DEFAULT_ROWSPEC,//10 - Year
FormFactory.RELATED_GAP_ROWSPEC,//11 - empty space
FormFactory.DEFAULT_ROWSPEC,//12 - Release Date
FormFactory.RELATED_GAP_ROWSPEC,//13 - empty space
FormFactory.DEFAULT_ROWSPEC,//14 - ID
FormFactory.RELATED_GAP_ROWSPEC,//15 - empty space
FormFactory.DEFAULT_ROWSPEC,//16 - Studio
FormFactory.RELATED_GAP_ROWSPEC,//17 - empty space
FormFactory.DEFAULT_ROWSPEC,//18 - Movie set
FormFactory.RELATED_GAP_ROWSPEC,//19 - empty space
FormFactory.DEFAULT_ROWSPEC,//20 - Plot
FormFactory.RELATED_GAP_ROWSPEC,//21 - empty space
FormFactory.DEFAULT_ROWSPEC,//22 - genres
FormFactory.RELATED_GAP_ROWSPEC,//23 - empty space
FormFactory.DEFAULT_ROWSPEC,//24 - tags
FormFactory.RELATED_GAP_ROWSPEC,//25 - empty space
RowSpec.decode("fill:pref:grow"),//26 - actors
FormFactory.RELATED_GAP_ROWSPEC//27 - empty space
});
fileDetailsPanel.setLayout(formLayout);
//next and previous buttons
previousMovieButton = new JButton("<< Previous Movie");
previousMovieButton.addActionListener(e -> handlePreviousMovieSelected());
numberInListSelectedLabel = new JLabel("0 / 0");
nextMovieButton = new JButton("Next Movie >>");
nextMovieButton.addActionListener(e -> handleNextMovieSelected());
JPanel movieNavigationButtonsPanel = new JPanel();
movieNavigationButtonsPanel.add(previousMovieButton);
movieNavigationButtonsPanel.add(numberInListSelectedLabel);
movieNavigationButtonsPanel.add(nextMovieButton);
changeEnabledStatusOfPreviousAndNextButtons();
fileDetailsPanel.add(movieNavigationButtonsPanel, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_CHANGE_MOVIE_BUTTONS));
//Path
JLabel lblPath = new JLabel("Path:");
pathTextField = new JTextField(NO_FILE_SELECTED, DEFAULT_TEXTFIELD_LENGTH);
pathTextField.setEditable(false);
updatePathTextField();
fileDetailsPanel.add(pathTextField, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_FILE_PATH));
fileDetailsPanel.add(lblPath, getLayoutPositionString(COLUMN_LABEL, ROW_FILE_PATH));
//Movie title
JLabel lblTitle = new JLabel("Title:");
fileDetailsPanel.add(lblTitle, getLayoutPositionString(COLUMN_LABEL, ROW_TITLE));
txtFieldMovieTitleText = new JTextField("", DEFAULT_TEXTFIELD_LENGTH);
txtFieldMovieTitleText.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(currentMovie != null)
{
String newValue = (String) txtFieldMovieTitleText.getText();
if(newValue != null && newValue.length() > 0)
{
currentMovie.setTitle(new Title(newValue));
guiMain.enableFileWrite();
}
else {
guiMain.disableFileWrite();
}
}
}
});
txtFieldMovieTitleText.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {
String newValue = (String) txtFieldMovieTitleText.getText();
if(newValue != null && newValue.length() > 0)
{
currentMovie.setTitle(new Title(newValue));
guiMain.enableFileWrite();
}
else {
guiMain.disableFileWrite();
}
}
@Override
public void keyPressed(KeyEvent e) {}
});
fileDetailsPanel.add(txtFieldMovieTitleText, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_TITLE));
JLabel lblOriginalTitle = new JLabel("Original Title:");
fileDetailsPanel.add(lblOriginalTitle, getLayoutPositionString(COLUMN_LABEL, ROW_ORIGINAL_TITLE));
txtFieldOriginalTitleText = new JTextField("", DEFAULT_TEXTFIELD_LENGTH);
txtFieldOriginalTitleText.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(currentMovie != null)
{
String newValue = (String) txtFieldOriginalTitleText.getText();
if(newValue != null)
{
currentMovie.setOriginalTitle(new OriginalTitle(newValue));
}
}
}
});
txtFieldOriginalTitleText.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
String newValue = (String) txtFieldOriginalTitleText.getText();
if(newValue != null)
{
currentMovie.setOriginalTitle(new OriginalTitle(newValue));
}
}
@Override
public void keyPressed(KeyEvent e) {
}
});
fileDetailsPanel.add(txtFieldOriginalTitleText, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_ORIGINAL_TITLE));
JLabel lblYear = new JLabel("Year:");
fileDetailsPanel.add(lblYear, getLayoutPositionString(COLUMN_LABEL, ROW_YEAR));
txtFieldScrapedYearText = new JTextField("",4);
fileDetailsPanel.add(txtFieldScrapedYearText, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_YEAR));
txtFieldScrapedYearText.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(currentMovie != null)
{
String newValue = (String) txtFieldScrapedYearText.getText();
if(newValue != null)
{
currentMovie.setYear(new Year(newValue));
}
}
}
});
txtFieldScrapedYearText.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
String newValue = (String) txtFieldScrapedYearText.getText();
if(newValue != null)
{
currentMovie.setYear(new Year(newValue));
}
}
@Override
public void keyPressed(KeyEvent e) {
}
});
JLabel lblReleaseDate = new JLabel("Release Date:");
fileDetailsPanel.add(lblReleaseDate, getLayoutPositionString(COLUMN_LABEL, ROW_RELEASE_DATE));
txtFieldReleaseDateText = new JTextField("",12);
txtFieldReleaseDateText.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(currentMovie != null)
{
String newValue = (String) txtFieldReleaseDateText.getText();
if(newValue != null)
{
currentMovie.setReleaseDate(new ReleaseDate(newValue));
}
}
}
});
txtFieldReleaseDateText.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
String newValue = (String) txtFieldReleaseDateText.getText();
if(newValue != null)
{
currentMovie.setReleaseDate(new ReleaseDate(newValue));
}
}
@Override
public void keyPressed(KeyEvent e) {
}
});
fileDetailsPanel.add(txtFieldReleaseDateText, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_RELEASE_DATE));
JLabel lblID = new JLabel("ID:");
fileDetailsPanel.add(lblID, getLayoutPositionString(COLUMN_LABEL, ROW_ID));
txtFieldIDCurrentMovie = new JTextField("", DEFAULT_TEXTFIELD_LENGTH);
txtFieldIDCurrentMovie.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(currentMovie != null)
{
String newValue = (String) txtFieldIDCurrentMovie.getText();
if(newValue != null)
{
currentMovie.setId(new ID(newValue));
}
}
}
});
txtFieldIDCurrentMovie.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
String newValue = (String) txtFieldIDCurrentMovie.getText();
if(newValue != null)
{
currentMovie.setId(new ID(newValue));
}
}
@Override
public void keyPressed(KeyEvent e) {
}
});
fileDetailsPanel.add(txtFieldIDCurrentMovie,getLayoutPositionString(COLUMN_FORM_FIELD, ROW_ID));
JLabel lblStudio = new JLabel("Studio:");
txtFieldStudio = new JTextField("", DEFAULT_TEXTFIELD_LENGTH);
txtFieldStudio.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(currentMovie != null)
{
String newValue = (String) txtFieldStudio.getText();
if(newValue != null)
{
currentMovie.setStudio(new Studio(newValue));
}
}
}
});
txtFieldStudio.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
String newValue = (String) txtFieldStudio.getText();
if(newValue != null)
{
currentMovie.setStudio(new Studio(newValue));
}
}
@Override
public void keyPressed(KeyEvent e) {
}
});
fileDetailsPanel.add(lblStudio,getLayoutPositionString(COLUMN_LABEL, ROW_STUDIO));
fileDetailsPanel.add(txtFieldStudio,getLayoutPositionString(COLUMN_FORM_FIELD, ROW_STUDIO));
JLabel lblSet = new JLabel("Movie Set:");
fileDetailsPanel.add(lblSet, getLayoutPositionString(COLUMN_LABEL, ROW_MOVIE_SET));
txtFieldMovieSet = new JTextField("", DEFAULT_TEXTFIELD_LENGTH);
txtFieldMovieSet.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(currentMovie != null)
{
String newValue = (String) txtFieldMovieSet.getText();
if(newValue != null)
{
currentMovie.setSet(new Set(newValue));
}
}
}
});
txtFieldMovieSet.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
String newValue = (String) txtFieldMovieSet.getText();
if(newValue != null)
{
currentMovie.setSet(new Set(newValue));
}
}
@Override
public void keyPressed(KeyEvent e) {
}
});
fileDetailsPanel.add(txtFieldMovieSet,getLayoutPositionString(COLUMN_FORM_FIELD, ROW_MOVIE_SET));
JLabel lblPlot = new JLabel("Plot:");
fileDetailsPanel.add(lblPlot, getLayoutPositionString(COLUMN_LABEL, ROW_PLOT));
moviePlotTextField = new JTextArea(3,35);
moviePlotTextField.setLineWrap(true);
moviePlotTextField.setWrapStyleWord(true);
moviePlotTextField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
String newValue = (String) moviePlotTextField.getText();
if(newValue != null)
{
currentMovie.setPlot(new Plot(newValue));
}
}
@Override
public void keyPressed(KeyEvent e) {
}
});
JScrollPane plotPanelScrollPane = new JScrollPane(moviePlotTextField,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
fileDetailsPanel.add(plotPanelScrollPane,getLayoutPositionString(COLUMN_FORM_FIELD, ROW_PLOT));
JLabel lblActors = new JLabel("Actors:");
fileDetailsPanel.add(lblActors, getLayoutPositionString(COLUMN_LABEL, ROW_ACTORS));
actorList = new JList<>(new ActorItemListModel());
List<File> currentlySelectedActorsFolderList = new ArrayList<>();
if(gui != null)
currentlySelectedActorsFolderList = gui.getCurrentlySelectedActorsFolderList();
actorList.setCellRenderer(new ActressListRenderer(currentlySelectedActorsFolderList));
actorList.setComponentPopupMenu(new FileDetailPanelPopup(new FileDetailPanelActorEditor(this)));
actorList.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
actorList.setSelectedIndex(actorList.locationToIndex(e.getPoint()));
}
//double or triple click the actor list to open the editor on the item you clicked
@Override
public void mouseClicked(MouseEvent evt) {
if (evt.getClickCount() == 2 || evt.getClickCount() == 3) {
// Double-click detected
FileDetailPanelActorEditor actorEditor = new FileDetailPanelActorEditor(FileDetailPanel.this);
actorEditor.showGUI(Operation.EDIT);
}
}
});
JScrollPane actorListScroller = new JScrollPane(actorList);
actorListScroller.setPreferredSize(new Dimension(250, 250));
fileDetailsPanel.add(actorListScroller, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_ACTORS));
JLabel lblGenres = new JLabel("Genres:");
fileDetailsPanel.add(lblGenres, getLayoutPositionString(COLUMN_LABEL, ROW_GENRES));
genreList = new JTextField("", DEFAULT_TEXTFIELD_LENGTH);
//the user clicks the field to edit it - we don't want them typing directly here
genreList.addKeyListener(new KeyListenerIgnoreTyping());
genreList.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent evt) {
EditGenresAction editGenresAction = new EditGenresAction(FileDetailPanel.this);
editGenresAction.actionPerformed(null);
}
});
fileDetailsPanel.add(genreList, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_GENRES));
JLabel lblTags = new JLabel("Tags:");
fileDetailsPanel.add(lblTags, getLayoutPositionString(COLUMN_LABEL, ROW_TAGS));
tagList = new JTextField("", DEFAULT_TEXTFIELD_LENGTH);
//the user clicks the field to edit it - we don't want them typing directly here
tagList.addKeyListener(new KeyListenerIgnoreTyping());
tagList.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent evt) {
EditTagsAction editTagsAction = new EditTagsAction(FileDetailPanel.this);
editTagsAction.actionPerformed(null);
}
});
fileDetailsPanel.add(tagList, getLayoutPositionString(COLUMN_FORM_FIELD, ROW_TAGS));
artWorkPanel = new ArtWorkPanel(guiMain);
//frmMoviescraper.getContentPane().add(artworkPanelScrollPane, BorderLayout.EAST);
String beginRow = "1";
String rowsToSpan = Integer.toString((formLayout.getRowCount()-1));
String rowSpanConstraintString = "," + beginRow + "," + rowsToSpan;
fileDetailsPanel.add(artWorkPanel,getLayoutPositionString(COLUMN_ARTWORK_PANEL, ROW_ARTWORK_PANEL) + rowSpanConstraintString);
}
public void updatePathTextField() {
int positionOfCurrentMovie = findPositionOfCurrentlySelectedMovie();
if (positionOfCurrentMovie >= 0 && guiMain.getCurrentlySelectedMovieFileList().size() > positionOfCurrentMovie) {
File currentlyShowingFile = guiMain.getCurrentlySelectedMovieFileList().get(positionOfCurrentMovie);
if(currentlyShowingFile != null && currentlyShowingFile.exists()) {
pathTextField.setText(currentlyShowingFile.getAbsolutePath().toString());
pathTextField.setCaretPosition(0);
}
}
else {
pathTextField.setText("");
}
}
/**
* Updates the view by setting the previous selected movie as the movie which is showing
*/
private void handlePreviousMovieSelected() {
int positionOfCurrentMovie = findPositionOfCurrentlySelectedMovie();
if(positionOfCurrentMovie == -1)
positionOfCurrentMovie = currentListIndexOfDisplayedMovie;
int positionOfPreviousMovie = positionOfCurrentMovie - 1;
if(positionOfCurrentMovie >= 0 && positionOfPreviousMovie < guiMain.movieToWriteToDiskList.size() && positionOfPreviousMovie >= 0) {
Movie previousMovie = guiMain.movieToWriteToDiskList.get(positionOfPreviousMovie);
//if (previousMovie != null) {
currentListIndexOfDisplayedMovie = positionOfPreviousMovie;
setNewMovie(previousMovie, false, false);
//}
}
}
/**
* Updates the view by setting the next selected movie as the movie which is showing
*/
private void handleNextMovieSelected() {
int positionOfCurrentMovie = findPositionOfCurrentlySelectedMovie();
if(positionOfCurrentMovie == -1)
positionOfCurrentMovie = currentListIndexOfDisplayedMovie;
int positionOfNextMovie = positionOfCurrentMovie + 1;
if(positionOfCurrentMovie >= 0 && positionOfNextMovie < guiMain.movieToWriteToDiskList.size()) {
Movie nextMovie = guiMain.movieToWriteToDiskList.get(positionOfNextMovie);
//if (nextMovie != null) {
currentListIndexOfDisplayedMovie = positionOfNextMovie;
setNewMovie(nextMovie, false, false);
//}
}
}
//returns -1 if not found
private int findPositionOfCurrentlySelectedMovie() {
if(guiMain != null && guiMain.movieToWriteToDiskList != null && currentMovie != null) {
for(int i = 0; i < guiMain.movieToWriteToDiskList.size(); i++) {
if(guiMain.movieToWriteToDiskList.get(i) != null &&
guiMain.movieToWriteToDiskList.get(i).equals(currentMovie))
return i;
}
}
return -1;
}
/**
* Sets a new movie and updates a view
* @param newMovie the movie this fileDetailPanel will show
* @param forcePosterUpdate whether to force a redownload from the poster defined in the Thumb url
*/
public void setNewMovie(Movie newMovie, boolean forcePosterUpdate) {
setNewMovie(newMovie, forcePosterUpdate, false);
}
/**
* Sets a new movie and updates a view
* @param newMovie the movie this fileDetailPanel will show
* @param forcePosterUpdate whether to force a redownload from the poster defined in the Thumb url
* @param modifyWriteToDiskList - whether to modify the gui object's disk list by adding the currently viewed item if the disk list is empty
*/
public void setNewMovie(Movie newMovie, boolean forcePosterUpdate, boolean modifyWriteToDiskList) {
//System.out.println("Setting new movie: " + newMovie);
if(newMovie != null)
{
setCurrentMovie(newMovie);
updateView(forcePosterUpdate, modifyWriteToDiskList);
}
else {
clearView();
updatePathTextField();
changeEnabledStatusOfPreviousAndNextButtons();
updateNumberInListSelectedLabel();
updateView(true,false);
}
}
public void clearView() {
artWorkPanel.clearPictures();
setTitleEditable(false);
this.currentMovie = getEmptyMovie();
}
/**
* Updates the view for the current movie
* @param forcePosterUpdate - if force a refresh of the poster from the URL by downloading the file. If false, tries to
* read from the local file first
* @param newMovieWasSet - true if you are setting a new movie. clears the old one and refreshes all fields
*/
public void updateView(boolean forcePosterUpdate, boolean newMovieWasSet) {
List<Movie> movieToWriteToDiskList = guiMain.getMovieToWriteToDiskList();
//do i need this?
//currentListIndexOfDisplayedMovie = Math.max(findPositionOfCurrentlySelectedMovie(),0);
if(newMovieWasSet && movieToWriteToDiskList.size() == 0)
{
movieToWriteToDiskList.add(currentMovie);
}
//begin
if ((movieToWriteToDiskList == null || movieToWriteToDiskList.size() == 0) && !newMovieWasSet) {
clearView();
} else if (movieToWriteToDiskList != null && movieToWriteToDiskList.get(currentListIndexOfDisplayedMovie) != null) {
if(!newMovieWasSet)
clearView();
if(!newMovieWasSet)
this.setCurrentMovie(movieToWriteToDiskList.get(currentListIndexOfDisplayedMovie));
//All the titles from the various versions scraped of this movie from the different sites
this.getCurrentMovie().getAllTitles().add(getCurrentMovie().getTitle());
String fileName = this.getCurrentMovie().getFileName();
if(fileName != null && fileName.trim().length() > 0)
this.getCurrentMovie().getAllTitles().add(new Title(fileName));
if(this.getCurrentMovie().getAllTitles().size() > 0)
this.setTitleEditable(true);
//end
}
txtFieldMovieTitleText.setText(currentMovie.getTitle().getTitle());
txtFieldMovieTitleText.setCaretPosition(0);
txtFieldOriginalTitleText.setText( currentMovie.getOriginalTitle().getOriginalTitle() );
txtFieldOriginalTitleText.setCaretPosition(0);
txtFieldScrapedYearText.setText( currentMovie.getYear().getYear() );
txtFieldReleaseDateText.setText(currentMovie.getReleaseDate().getReleaseDate());
txtFieldIDCurrentMovie.setText( currentMovie.getId().getId() );
txtFieldStudio.setText( currentMovie.getStudio().getStudio() );
txtFieldStudio.setCaretPosition(0);
txtFieldMovieSet.setText( currentMovie.getSet().getSet() );
txtFieldMovieSet.setCaretPosition(0);
moviePlotTextField.setText( currentMovie.getPlot().getPlot() );
moviePlotTextField.setCaretPosition(0);
genreList.setText(toGenreListFormat(currentMovie.getGenres()));
genreList.setCaretPosition(0);
tagList.setText(toTagListFormat(currentMovie.getTags()));
tagList.setCaretPosition(0);
//Actors and Genres are automatically generated
actorList.updateUI();
artWorkPanel.updateView(forcePosterUpdate, guiMain);
if(txtFieldMovieTitleText.getText().length() > 0) {
guiMain.enableFileWrite();
}
else {
guiMain.disableFileWrite();
}
updatePathTextField();
changeEnabledStatusOfPreviousAndNextButtons();
updateNumberInListSelectedLabel();
}
private void changeEnabledStatusOfPreviousAndNextButtons() {
List<Movie> movieList = guiMain.getMovieToWriteToDiskList();
System.out.println("Movie Size: " + movieList.size());
//no movies to scroll through
if(movieList.size() == 0) {
nextMovieButton.setEnabled(false);
previousMovieButton.setEnabled(false);
return;
}
if((currentListIndexOfDisplayedMovie - 1) < 0) {
previousMovieButton.setEnabled(false);
}
else previousMovieButton.setEnabled(true);
if((currentListIndexOfDisplayedMovie + 1) >= movieList.size()) {
nextMovieButton.setEnabled(false);
}
else nextMovieButton.setEnabled(true);
}
//Updates the label which shows what movie number we are on: e.g. 1/5
private void updateNumberInListSelectedLabel() {
int movieNumberIAmOn = currentListIndexOfDisplayedMovie + 1;
int numberOfMovies = guiMain.getMovieToWriteToDiskList().size();
numberInListSelectedLabel.setText(movieNumberIAmOn + " / " + numberOfMovies);
}
public Movie getCurrentMovie() {
return currentMovie;
}
public Movie getEmptyMovie() {
return Movie.getEmptyMovie();
}
public void setTitleEditable(boolean value) {
txtFieldMovieTitleText.setEditable(value);
}
public ArtWorkPanel getArtWorkPanel() {
return artWorkPanel;
}
private final class KeyListenerIgnoreTyping implements KeyListener {
@Override
public void keyTyped(KeyEvent e) {
e.consume();
}
@Override
public void keyPressed(KeyEvent e) {
e.consume();
}
@Override
public void keyReleased(KeyEvent e) {
e.consume();
}
}
public class GenreItemListModel extends DefaultListModel<Genre> {
private static final long serialVersionUID = 973741706455659871L;
@Override
public Genre getElementAt(int index) {
Genre genre = currentMovie.getGenres().get(index);
return (genre != null) ? genre : new Genre("");
}
@Override
public int getSize() {
return currentMovie.getGenres().size();
}
}
class ActorItemListModel extends AbstractListModel<Actor> {
private static final long serialVersionUID = 276453659002862686L;
@Override
public Actor getElementAt(int index) {
return currentMovie.getActors().get(index);
}
@Override
public int getSize() {
return currentMovie.getActors().size();
}
}
public JList<Actor> getActorList() {
return actorList;
}
public void setActorList(JList<Actor> actorList) {
this.actorList = actorList;
}
public JTextField getGenreList()
{
return genreList;
}
public void setGenreList(JTextField genreList)
{
this.genreList = genreList;
}
public JTextField getTagList()
{
return tagList;
}
public void setTagList(JTextField tagList)
{
this.tagList = tagList;
}
public void setCurrentMovie(Movie currentMovie) {
this.currentMovie = currentMovie;
}
public void hideArtworkPanel()
{
artWorkPanel.setVisible(false);
}
public static String toGenreListFormat(ArrayList<Genre> genres) {
String genreText = "";
for(Genre currentGenre : genres)
{
genreText += currentGenre.getGenre();
genreText += " \\ ";
}
if(genreText.endsWith(" \\ "))
{
genreText = genreText.substring(0, genreText.length()-3);
}
return genreText;
}
public static String toTagListFormat(ArrayList<Tag> tags) {
String tagText = "";
for(Tag currentTag : tags)
{
tagText += currentTag.getTag();
tagText += " \\ ";
}
if(tagText.endsWith(" \\ "))
{
tagText = tagText.substring(0, tagText.length()-3);
}
return tagText;
}
private String getLayoutPositionString(int columnNumber, int rowNumber)
{
return columnNumber + ", " + rowNumber;
}
}