diff --git a/src/main/java/se/lantz/gui/GameDetailsBackgroundPanel.java b/src/main/java/se/lantz/gui/GameDetailsBackgroundPanel.java index 22b4f42..e474130 100644 --- a/src/main/java/se/lantz/gui/GameDetailsBackgroundPanel.java +++ b/src/main/java/se/lantz/gui/GameDetailsBackgroundPanel.java @@ -296,11 +296,11 @@ public class GameDetailsBackgroundPanel extends JPanel { public void actionPerformed(ActionEvent e) { - //Make sure any edits to time for saved states are commited. + //Make sure any edits to time for saved states are committed. savesBackgroundPanel.commitEdits(); if (model.saveData()) { - getInfoBackgroundPanel().getScreensPanel().resetWhenSaved(); + getInfoBackgroundPanel().getScreensPanel().resetWhenSavedOrNewGameSelected(); } } }); diff --git a/src/main/java/se/lantz/gui/ScreenshotsPanel.java b/src/main/java/se/lantz/gui/ScreenshotsPanel.java index ffd7ae7..4e25742 100644 --- a/src/main/java/se/lantz/gui/ScreenshotsPanel.java +++ b/src/main/java/se/lantz/gui/ScreenshotsPanel.java @@ -12,6 +12,7 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.beans.Beans; +import java.beans.PropertyChangeEvent; import java.io.File; import java.io.IOException; import java.nio.file.FileSystems; @@ -117,13 +118,15 @@ public class ScreenshotsPanel extends JPanel add(getGamePanel(), gbc_gamePanel); if (!Beans.isDesignTime()) { - infomodel.addPropertyChangeListener((e) -> modelChanged()); + infomodel.addPropertyChangeListener(e -> modelChanged()); //React on changes to system, C64 or Vic-20 - model.getSystemModel().addPropertyChangeListener((e) -> modelChanged()); + model.getSystemModel().addPropertyChangeListener("c64", e -> systemChanged(e)); + //React on when a new game is selected + model.addPropertyChangeListener("gameSelected", e -> resetWhenSavedOrNewGameSelected()); } } - public void resetWhenSaved() + public void resetWhenSavedOrNewGameSelected() { currentCoverFile = ""; currentScreen1File = ""; @@ -147,6 +150,16 @@ public class ScreenshotsPanel extends JPanel reloadScreens(); } + private void systemChanged(PropertyChangeEvent e) + { + //Update cover info slot when the system type changes, but only for custom views and all games (id > -2) + if (infomodel.isInfoSlot() && model.getSelectedGameView().getGameViewId() > -2) + { + infomodel + .setCoverImage((boolean) e.getNewValue() ? FileManager.infoSlotC64Cover : FileManager.infoSlotVic20Cover); + } + } + private String getGameFileName() { String returnValue = infomodel.getGamesFile(); @@ -159,7 +172,6 @@ public class ScreenshotsPanel extends JPanel private void reloadScreens() { - // Cover BufferedImage coverImage = infomodel.getCoverImage(); if (coverImage != null) { @@ -177,7 +189,7 @@ public class ScreenshotsPanel extends JPanel if (modelCoverFile.isEmpty()) { currentCoverFile = ""; - getCoverImageLabel().setIcon(getMissingCoverImageIcon()); + getCoverImageLabel().setIcon(getDefaultCoverImageIcon()); } else if (!modelCoverFile.equals(currentCoverFile)) { @@ -185,6 +197,7 @@ public class ScreenshotsPanel extends JPanel currentCoverFile = modelCoverFile; } } + // Screen 1 BufferedImage screen1Image = infomodel.getScreen1Image(); if (screen1Image != null) @@ -269,12 +282,12 @@ public class ScreenshotsPanel extends JPanel catch (IOException e) { logger.error("can't read file: " + filename, e); - getCoverImageLabel().setIcon(getMissingCoverImageIcon()); + getCoverImageLabel().setIcon(getDefaultCoverImageIcon()); } } else { - getCoverImageLabel().setIcon(getMissingCoverImageIcon()); + getCoverImageLabel().setIcon(getDefaultCoverImageIcon()); } } @@ -313,7 +326,7 @@ public class ScreenshotsPanel extends JPanel return missingSceenshotIcon; } - private ImageIcon getMissingCoverImageIcon() + private ImageIcon getDefaultCoverImageIcon() { if (missingC64CoverIcon == null) { @@ -767,12 +780,14 @@ public class ScreenshotsPanel extends JPanel { //Ask if text shall be added int value = JOptionPane.showConfirmDialog(getScreenshotPanel(), - "Do you want to add the gamelist view name to the screenshot?", - "Screenshot file", - JOptionPane.YES_NO_OPTION, - JOptionPane.INFORMATION_MESSAGE); + "Do you want to add the gamelist view name to the screenshot?", + "Screenshot file", + JOptionPane.YES_NO_OPTION, + JOptionPane.INFORMATION_MESSAGE); if (value == JOptionPane.YES_OPTION) { + //Make sure the image is of right size vefore adding text to it + returnImage = FileManager.scaleImageTo320x200x32bit(returnImage); model.writeGameViewTextOnScreen(returnImage, first ? Color.yellow : Color.red); } } @@ -812,8 +827,18 @@ public class ScreenshotsPanel extends JPanel } fileChooser.setCurrentDirectory(new File(gameDir)); - FileNameExtensionFilter vicefilter = - new FileNameExtensionFilter("Vice runnable files", "d64", "t64", "tap", "VSF", "VSZ", "GZ", "crt", "prg", "g64", "d81", "d82"); + FileNameExtensionFilter vicefilter = new FileNameExtensionFilter("Vice runnable files", + "d64", + "t64", + "tap", + "VSF", + "VSZ", + "GZ", + "crt", + "prg", + "g64", + "d81", + "d82"); fileChooser.addChoosableFileFilter(vicefilter); fileChooser.setFileFilter(vicefilter); int value = fileChooser.showOpenDialog(MainWindow.getInstance()); @@ -868,11 +893,13 @@ public class ScreenshotsPanel extends JPanel FileManager.getConfiguredProperties().put(SCREENS_DIR_PROPERTY, selectedFile.toPath().getParent().toString()); if (first) { - infomodel.setScreen1Image(handleScreenFileDrop(new File[] { selectedFile }, screen1ImageLabel, edit1Button, true)); + infomodel + .setScreen1Image(handleScreenFileDrop(new File[] { selectedFile }, screen1ImageLabel, edit1Button, true)); } else { - infomodel.setScreen2Image(handleScreenFileDrop(new File[] { selectedFile }, screen2ImageLabel, edit2Button, false)); + infomodel + .setScreen2Image(handleScreenFileDrop(new File[] { selectedFile }, screen2ImageLabel, edit2Button, false)); } } } diff --git a/src/main/java/se/lantz/model/AbstractModel.java b/src/main/java/se/lantz/model/AbstractModel.java index e1ae41d..3213b6d 100644 --- a/src/main/java/se/lantz/model/AbstractModel.java +++ b/src/main/java/se/lantz/model/AbstractModel.java @@ -22,6 +22,11 @@ public abstract class AbstractModel { propertyChangeSupport.addPropertyChangeListener(listener); } + + public void addPropertyChangeListener(String property, PropertyChangeListener listener) + { + propertyChangeSupport.addPropertyChangeListener(property, listener); + } public void removePropertyChangeListener(PropertyChangeListener listener) { @@ -36,6 +41,24 @@ public abstract class AbstractModel propertyChangeSupport.firePropertyChange("notify", null, ""); } } + + protected void notifyChange(String property, boolean oldValue, boolean newValue) + { + if (!disable) + { + dataChanged = true; + propertyChangeSupport.firePropertyChange(property, oldValue, newValue); + } + } + + protected void notifyChange(String property, String oldValue, String newValue) + { + if (!disable) + { + dataChanged = true; + propertyChangeSupport.firePropertyChange(property, oldValue, newValue); + } + } public boolean isDataChanged() { diff --git a/src/main/java/se/lantz/model/MainViewModel.java b/src/main/java/se/lantz/model/MainViewModel.java index 556536e..a0f8db6 100644 --- a/src/main/java/se/lantz/model/MainViewModel.java +++ b/src/main/java/se/lantz/model/MainViewModel.java @@ -278,6 +278,8 @@ public class MainViewModel extends AbstractModel //Trigger a save directly when adding a info slot saveData(); } + //Notify that a new game has been selected + notifyChange("gameSelected", null, ""); } public StringBuilder importGameInfo(List rowValues, @@ -910,7 +912,7 @@ public class MainViewModel extends AbstractModel infoModel.resetOldFileNames(); //Cover image - infoModel.setCoverImage(FileManager.getInfoSlotCoverImage()); + infoModel.setCoverImage(FileManager.getInfoSlotCover(this.selectedGameView.getGameViewId())); //Screen images BufferedImage screenImage1 = FileManager.getInfoSlotScreenImage(true); writeGameViewTextOnScreen(screenImage1, Color.yellow); @@ -920,7 +922,7 @@ public class MainViewModel extends AbstractModel writeGameViewTextOnScreen(screenImage2, Color.red); infoModel.setScreen2Image(screenImage2); } - + public void writeGameViewTextOnScreen(BufferedImage image, Color color) { String title = this.selectedGameView.getName().toUpperCase(); diff --git a/src/main/java/se/lantz/model/SystemModel.java b/src/main/java/se/lantz/model/SystemModel.java index 50cfb9c..51db493 100644 --- a/src/main/java/se/lantz/model/SystemModel.java +++ b/src/main/java/se/lantz/model/SystemModel.java @@ -319,7 +319,8 @@ public class SystemModel extends AbstractModel } if ((Boolean.compare(old, c64) != 0)) { - notifyChange(); + //Notify with explicit values to be able to react on this in ScreenshotsPanel. + notifyChange("c64", old, c64); } } @@ -338,7 +339,8 @@ public class SystemModel extends AbstractModel } if ((Boolean.compare(old, vic) != 0)) { - notifyChange(); + //Notify with explicit values to be able to react on this in ScreenshotsPanel. + notifyChange("c64", !old, !vic); } } diff --git a/src/main/java/se/lantz/util/FileManager.java b/src/main/java/se/lantz/util/FileManager.java index 37726da..0653365 100644 --- a/src/main/java/se/lantz/util/FileManager.java +++ b/src/main/java/se/lantz/util/FileManager.java @@ -54,6 +54,7 @@ import se.lantz.model.SavedStatesModel.SAVESTATE; import se.lantz.model.SystemModel; import se.lantz.model.data.GameDetails; import se.lantz.model.data.GameValidationDetails; +import se.lantz.model.data.GameView; public class FileManager { @@ -62,6 +63,9 @@ public class FileManager public static BufferedImage emptyC64Screenshot; public static BufferedImage emptyVic20Screenshot; + public static BufferedImage infoSlotC64Cover; + public static BufferedImage infoSlotVic20Cover; + public static final String GAMES = "./games/"; private static final String SCREENS = "./screens/"; private static final String COVERS = "./covers/"; @@ -90,6 +94,8 @@ public class FileManager emptyVic20Cover = ImageIO.read(FileManager.class.getResource("/se/lantz/CoverMissing-VIC20.png")); emptyC64Screenshot = ImageIO.read(FileManager.class.getResource("/se/lantz/MissingScreenshot-C64.png")); emptyVic20Screenshot = ImageIO.read(FileManager.class.getResource("/se/lantz/MissingScreenshot-VIC20.png")); + infoSlotC64Cover = ImageIO.read(FileManager.class.getResource("/se/lantz/InfoSlotC64Cover.png")); + infoSlotVic20Cover = ImageIO.read(FileManager.class.getResource("/se/lantz/InfoSlotVic20Cover.png")); } catch (IOException e) { @@ -115,16 +121,52 @@ public class FileManager return FileManager.class.getResourceAsStream("/se/lantz/MissingGame-Vic20.vsf.gz"); } - public static BufferedImage getInfoSlotCoverImage() + public static BufferedImage getInfoSlotCover(int gameViewId) { BufferedImage coverImage = null; + String coverName = "InfoSlotC64Cover.png"; + switch (gameViewId) + { + case GameView.FAVORITES_ID: + coverName = "InfoSlotF1Cover.png"; + break; + case GameView.FAVORITES_2_ID: + coverName = "InfoSlotF2Cover.png"; + break; + case GameView.FAVORITES_3_ID: + coverName = "InfoSlotF3Cover.png"; + break; + case GameView.FAVORITES_4_ID: + coverName = "InfoSlotF4Cover.png"; + break; + case GameView.FAVORITES_5_ID: + coverName = "InfoSlotF5Cover.png"; + break; + case GameView.FAVORITES_6_ID: + coverName = "InfoSlotF6Cover.png"; + break; + case GameView.FAVORITES_7_ID: + coverName = "InfoSlotF7Cover.png"; + break; + case GameView.FAVORITES_8_ID: + coverName = "InfoSlotF8Cover.png"; + break; + case GameView.FAVORITES_9_ID: + coverName = "InfoSlotF9Cover.png"; + break; + case GameView.FAVORITES_10_ID: + coverName = "InfoSlotF10Cover.png"; + break; + default: + break; + } try { - coverImage = ImageIO.read(FileManager.class.getResource("/se/lantz/InfoSlotCover.png")); + coverImage = ImageIO.read(FileManager.class.getResource("/se/lantz/" + coverName)); } catch (IOException e) { - ExceptionHandler.handleException(e, "Could not read cover image."); + ExceptionHandler.handleException(e, "Could not read info slot cover image."); } return coverImage; } diff --git a/src/main/resources/se/lantz/InfoSlotC64Cover.png b/src/main/resources/se/lantz/InfoSlotC64Cover.png new file mode 100644 index 0000000..943d0f6 Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotC64Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF10Cover.png b/src/main/resources/se/lantz/InfoSlotF10Cover.png new file mode 100644 index 0000000..a1cf6b7 Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF10Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF1Cover.png b/src/main/resources/se/lantz/InfoSlotF1Cover.png new file mode 100644 index 0000000..3127c29 Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF1Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF2Cover.png b/src/main/resources/se/lantz/InfoSlotF2Cover.png new file mode 100644 index 0000000..67a83ab Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF2Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF3Cover.png b/src/main/resources/se/lantz/InfoSlotF3Cover.png new file mode 100644 index 0000000..4c311f0 Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF3Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF4Cover.png b/src/main/resources/se/lantz/InfoSlotF4Cover.png new file mode 100644 index 0000000..a3b5ca5 Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF4Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF5Cover.png b/src/main/resources/se/lantz/InfoSlotF5Cover.png new file mode 100644 index 0000000..a9281ab Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF5Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF6Cover.png b/src/main/resources/se/lantz/InfoSlotF6Cover.png new file mode 100644 index 0000000..69a8391 Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF6Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF7Cover.png b/src/main/resources/se/lantz/InfoSlotF7Cover.png new file mode 100644 index 0000000..3d0cafe Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF7Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF8Cover.png b/src/main/resources/se/lantz/InfoSlotF8Cover.png new file mode 100644 index 0000000..182618a Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF8Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotF9Cover.png b/src/main/resources/se/lantz/InfoSlotF9Cover.png new file mode 100644 index 0000000..fba988e Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotF9Cover.png differ diff --git a/src/main/resources/se/lantz/InfoSlotVic20Cover.png b/src/main/resources/se/lantz/InfoSlotVic20Cover.png new file mode 100644 index 0000000..744afd9 Binary files /dev/null and b/src/main/resources/se/lantz/InfoSlotVic20Cover.png differ