feat: Changed export dialog to include export dir selection and option to delete all available games

This commit is contained in:
lantzelot-swe 2021-01-24 23:20:19 +01:00
parent 986b88156e
commit 7f317cd6a2
5 changed files with 295 additions and 33 deletions

View File

@ -367,22 +367,7 @@ public class MenuManager
{
exportManager.setGamesToExport(gamesList);
exportManager.setExportFormat(exportSelectionDialog.isFavFormat());
final JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Select a directory to export to");
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
String exportDir = FileManager.getConfiguredProperties().getProperty(EXPORT_DIR_PROPERTY);
if (exportDir == null)
{
exportDir = ".";
}
fileChooser.setCurrentDirectory(new File(exportDir));
fileChooser.setApproveButtonText("Export");
int value = fileChooser.showDialog(this.mainWindow, "Export");
if (value == JFileChooser.APPROVE_OPTION)
{
File selectedDir = fileChooser.getSelectedFile();
FileManager.getConfiguredProperties().put(EXPORT_DIR_PROPERTY, selectedDir.toPath().toString());
exportManager.setTargerDirectory(selectedDir);
exportManager.setTargetDirectory(exportSelectionDialog.getTargetDirectory(), exportSelectionDialog.deleteBeforeExport());
ExportProgressDialog dialog = new ExportProgressDialog(this.mainWindow);
ExportWorker worker = new ExportWorker(exportManager, dialog);
worker.execute();
@ -390,7 +375,6 @@ public class MenuManager
}
}
}
}
private void backupDb()
{

View File

@ -0,0 +1,159 @@
package se.lantz.gui;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JTextField;
import se.lantz.util.FileManager;
public class SelectDirPanel extends JPanel
{
private static final String IMPORT_DIR_PROPERTY = "importDir";
private static final String EXPORT_DIR_PROPERTY = "exportDir";
private JTextField dirTextField;
private JButton selectDirButton;
private File targetDirectory;
private boolean importMode = true;
private String configuredDir = "";
public SelectDirPanel(boolean importMode)
{
this.importMode = importMode;
GridBagLayout gridBagLayout = new GridBagLayout();
setLayout(gridBagLayout);
GridBagConstraints gbc_dirTextField = new GridBagConstraints();
gbc_dirTextField.anchor = GridBagConstraints.NORTHWEST;
gbc_dirTextField.weighty = 1.0;
gbc_dirTextField.weightx = 1.0;
gbc_dirTextField.insets = new Insets(5, 5, 0, 5);
gbc_dirTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_dirTextField.gridx = 0;
gbc_dirTextField.gridy = 0;
add(getDirTextField(), gbc_dirTextField);
GridBagConstraints gbc_selectDirButton = new GridBagConstraints();
gbc_selectDirButton.weighty = 1.0;
gbc_selectDirButton.anchor = GridBagConstraints.NORTHWEST;
gbc_selectDirButton.insets = new Insets(5, 0, 0, 5);
gbc_selectDirButton.gridx = 1;
gbc_selectDirButton.gridy = 0;
add(getSelectDirButton(), gbc_selectDirButton);
if (importMode)
{
configuredDir = FileManager.getConfiguredProperties().getProperty(IMPORT_DIR_PROPERTY);
}
else
{
configuredDir = FileManager.getConfiguredProperties().getProperty(EXPORT_DIR_PROPERTY);
}
if (configuredDir == null)
{
configuredDir = ".";
}
targetDirectory = new File(configuredDir);
getDirTextField().setText(configuredDir);
}
private JTextField getDirTextField() {
if (dirTextField == null) {
dirTextField = new JTextField();
dirTextField.setEditable(false);
dirTextField.setColumns(10);
}
return dirTextField;
}
private JButton getSelectDirButton() {
if (selectDirButton == null) {
selectDirButton = new JButton("...");
selectDirButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (importMode)
{
selectImportDirectory();
}
else
{
selectExportDirectory();
}
}
});
selectDirButton.setMargin(new Insets(1, 3, 1, 3));
}
return selectDirButton;
}
private void selectImportDirectory()
{
final JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Select directory containing a Carousel");
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setCurrentDirectory(new File(configuredDir));
int value = fileChooser.showDialog(this, "Import");
// if (value == JFileChooser.APPROVE_OPTION)
// {
// targetDirectory = fileChooser.getSelectedFile();
// configuredDir = targetDirectory.toPath().toString();
// FileManager.getConfiguredProperties().put(IMPORT_DIR_PROPERTY, configuredDir);
// if (importManager.checkSelectedFolder(targetDirectory.toPath()))
// {
// //Show options dialog
// ImportOptionsDialog optionsDialog = new ImportOptionsDialog(this.mainWindow);
// optionsDialog.pack();
// optionsDialog.setLocationRelativeTo(this.mainWindow);
// if (optionsDialog.showDialog())
// {
// importManager.setSelectedOption(optionsDialog.getSelectedOption());
// importManager.setAddAsFavorite(optionsDialog.getMarkAsFavorite());
// ImportProgressDialog dialog = new ImportProgressDialog(this.mainWindow);
// ImportWorker worker = new ImportWorker(importManager, dialog);
// worker.execute();
// dialog.setVisible(true);
// //Refresh current game view after import
// uiModel.reloadCurrentGameView();
// MainWindow.getInstance().repaintAfterModifications();
// }
// }
// else
// {
// JOptionPane.showMessageDialog(this.mainWindow,
// "The selected directory doesn't contain a valid carousel structure.",
// "Import games",
// JOptionPane.ERROR_MESSAGE);
// }
}
private void selectExportDirectory()
{
final JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Select a directory to export to");
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setCurrentDirectory(new File(configuredDir));
fileChooser.setApproveButtonText("Export");
int value = fileChooser.showDialog(this, "Export");
if (value == JFileChooser.APPROVE_OPTION)
{
if (value == JFileChooser.APPROVE_OPTION)
{
targetDirectory = fileChooser.getSelectedFile();
configuredDir = targetDirectory.toPath().toString();
FileManager.getConfiguredProperties().put(EXPORT_DIR_PROPERTY, configuredDir);
getDirTextField().setText(configuredDir);
}
}
}
public File getTargetDirectory()
{
return targetDirectory;
}
}

View File

@ -2,6 +2,7 @@ package se.lantz.gui.exports;
import java.awt.Dimension;
import java.awt.Frame;
import java.io.File;
import java.util.List;
import se.lantz.gui.BaseDialog;
@ -16,13 +17,13 @@ public class ExportGamesDialog extends BaseDialog
super(owner);
setTitle("Export games");
addContent(getExportGamesPanel());
getOkButton().setText("OK");
getOkButton().setText("Export");
this.setPreferredSize(new Dimension(800,700));
}
private ExportGamesSelectionPanel getExportGamesPanel() {
if (panel == null) {
panel = new ExportGamesSelectionPanel();
panel = new ExportGamesSelectionPanel(getOkButton());
}
return panel;
}
@ -36,4 +37,14 @@ public class ExportGamesDialog extends BaseDialog
{
return getExportGamesPanel().isFavFormat();
}
public File getTargetDirectory()
{
return getExportGamesPanel().getTargetDirectory();
}
public boolean deleteBeforeExport()
{
return getExportGamesPanel().deleteBeforeExport();
}
}

View File

@ -6,6 +6,7 @@ import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -28,6 +29,8 @@ import se.lantz.model.data.GameView;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import se.lantz.gui.SelectDirPanel;
import javax.swing.JCheckBox;
public class ExportGamesSelectionPanel extends JPanel
{
@ -52,9 +55,16 @@ public class ExportGamesSelectionPanel extends JPanel
private JRadioButton maxiFormatRadioButton;
private JRadioButton favFormatRadioButton;
private final ButtonGroup formatGroup = new ButtonGroup();
private JPanel outputDirPanel;
private JLabel outputDirLabel;
private SelectDirPanel selectDirPanel;
private JCheckBox deleteCheckBox;
private JButton exportButton;
public ExportGamesSelectionPanel()
public ExportGamesSelectionPanel(JButton exportButton)
{
this.exportButton = exportButton;
exportButton.setEnabled(false);
uiModel = new MainViewModel();
GridBagLayout gridBagLayout = new GridBagLayout();
setLayout(gridBagLayout);
@ -174,9 +184,7 @@ public class ExportGamesSelectionPanel extends JPanel
selectedListModel.addElement(gameListData);
}
}
sortSelectedList();
getWarningLabel().setVisible(selectedListModel.getSize() > 226);
getCountLabel().setText(Integer.toString(selectedListModel.getSize()));
updateAfterEditingSelectedList();
}
});
addButton.setEnabled(false);
@ -200,9 +208,7 @@ public class ExportGamesSelectionPanel extends JPanel
{
selectedListModel.removeElement(gameListData);
}
sortSelectedList();
getWarningLabel().setVisible(selectedListModel.getSize() > MAX_GAMES);
getCountLabel().setText(Integer.toString(selectedListModel.getSize()));
updateAfterEditingSelectedList();
}
});
removeButton.setEnabled(false);
@ -210,6 +216,14 @@ public class ExportGamesSelectionPanel extends JPanel
return removeButton;
}
private void updateAfterEditingSelectedList()
{
sortSelectedList();
getWarningLabel().setVisible(selectedListModel.getSize() > MAX_GAMES);
exportButton.setEnabled(selectedListModel.getSize() > 0);
getCountLabel().setText(Integer.toString(selectedListModel.getSize()));
}
private JPanel getSelectedListPanel()
{
if (selectedListPanel == null)
@ -374,11 +388,13 @@ public class ExportGamesSelectionPanel extends JPanel
{
formatPanel = new JPanel();
GridBagLayout gbl_formatPanel = new GridBagLayout();
gbl_formatPanel.rowWeights = new double[]{0.0, 0.0, 0.0, 1.0};
gbl_formatPanel.columnWeights = new double[]{1.0};
formatPanel.setLayout(gbl_formatPanel);
GridBagConstraints gbc_formatInfoLabel = new GridBagConstraints();
gbc_formatInfoLabel.weightx = 1.0;
gbc_formatInfoLabel.anchor = GridBagConstraints.WEST;
gbc_formatInfoLabel.insets = new Insets(10, 10, 5, 5);
gbc_formatInfoLabel.insets = new Insets(10, 10, 5, 0);
gbc_formatInfoLabel.gridx = 0;
gbc_formatInfoLabel.gridy = 0;
formatPanel.add(getFormatInfoLabel(), gbc_formatInfoLabel);
@ -397,6 +413,12 @@ public class ExportGamesSelectionPanel extends JPanel
gbc_favFormatRadioButton.gridx = 0;
gbc_favFormatRadioButton.gridy = 2;
formatPanel.add(getFavFormatRadioButton(), gbc_favFormatRadioButton);
GridBagConstraints gbc_outputDirPanel = new GridBagConstraints();
gbc_outputDirPanel.insets = new Insets(10, 0, 0, 0);
gbc_outputDirPanel.fill = GridBagConstraints.BOTH;
gbc_outputDirPanel.gridx = 0;
gbc_outputDirPanel.gridy = 3;
formatPanel.add(getOutputDirPanel(), gbc_outputDirPanel);
}
return formatPanel;
}
@ -431,4 +453,62 @@ public class ExportGamesSelectionPanel extends JPanel
}
return favFormatRadioButton;
}
private JPanel getOutputDirPanel() {
if (outputDirPanel == null) {
outputDirPanel = new JPanel();
GridBagLayout gbl_outputDirPanel = new GridBagLayout();
gbl_outputDirPanel.columnWidths = new int[]{0, 0};
gbl_outputDirPanel.rowHeights = new int[]{0, 0, 0, 0};
gbl_outputDirPanel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_outputDirPanel.rowWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE};
outputDirPanel.setLayout(gbl_outputDirPanel);
GridBagConstraints gbc_outputDirLabel = new GridBagConstraints();
gbc_outputDirLabel.anchor = GridBagConstraints.WEST;
gbc_outputDirLabel.insets = new Insets(0, 10, 0, 0);
gbc_outputDirLabel.gridx = 0;
gbc_outputDirLabel.gridy = 0;
outputDirPanel.add(getOutputDirLabel(), gbc_outputDirLabel);
GridBagConstraints gbc_selectDirPanel = new GridBagConstraints();
gbc_selectDirPanel.insets = new Insets(0, 5, 5, 0);
gbc_selectDirPanel.fill = GridBagConstraints.BOTH;
gbc_selectDirPanel.gridx = 0;
gbc_selectDirPanel.gridy = 1;
outputDirPanel.add(getSelectDirPanel(), gbc_selectDirPanel);
GridBagConstraints gbc_deleteCheckBox = new GridBagConstraints();
gbc_deleteCheckBox.insets = new Insets(0, 10, 0, 0);
gbc_deleteCheckBox.anchor = GridBagConstraints.WEST;
gbc_deleteCheckBox.gridx = 0;
gbc_deleteCheckBox.gridy = 2;
outputDirPanel.add(getDeleteCheckBox(), gbc_deleteCheckBox);
}
return outputDirPanel;
}
private JLabel getOutputDirLabel() {
if (outputDirLabel == null) {
outputDirLabel = new JLabel("Select directory to export to:");
}
return outputDirLabel;
}
private SelectDirPanel getSelectDirPanel() {
if (selectDirPanel == null) {
selectDirPanel = new SelectDirPanel(false);
}
return selectDirPanel;
}
private JCheckBox getDeleteCheckBox() {
if (deleteCheckBox == null) {
deleteCheckBox = new JCheckBox("Delete existing games in the selected directory before exporting");
}
return deleteCheckBox;
}
File getTargetDirectory()
{
return getSelectDirPanel().getTargetDirectory();
}
boolean deleteBeforeExport()
{
return getDeleteCheckBox().isSelected();
}
}

View File

@ -6,6 +6,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Comparator;
import java.util.List;
import org.slf4j.Logger;
@ -25,6 +26,7 @@ public class ExportManager
private File targetDir;
private MainViewModel uiModel;
private boolean favFormat = false;
private boolean deleteBeforeExport = false;
public ExportManager(MainViewModel uiModel)
{
@ -36,9 +38,25 @@ public class ExportManager
this.gamesList = gamesList;
}
public void setTargerDirectory(File targetDir)
public void setTargetDirectory(File targetDir, boolean delete)
{
this.deleteBeforeExport = delete;
Path targetDirPath = targetDir.toPath().resolve("games");
if (delete)
{
try
{
if (Files.exists(targetDirPath))
{
Files.walk(targetDirPath).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
}
}
catch (IOException e)
{
ExceptionHandler.handleException(e, "Could not delete games folder");
}
}
this.targetDir = targetDirPath.toFile();
try
{
@ -57,12 +75,21 @@ public class ExportManager
public void createGameInfoFiles(StringBuilder infoBuilder)
{
if (deleteBeforeExport)
{
infoBuilder.append("Deleted existing games folder before creating new game files\n");
}
for (GameDetails gameDetails : gameDetailsList)
{
uiModel.exportGameInfoFile(gameDetails, targetDir, this.favFormat, infoBuilder);
}
}
public void deleteSelectedGamesFolder()
{
}
public void setExportFormat(boolean favFormat)
{
this.favFormat = favFormat;
@ -152,5 +179,6 @@ public class ExportManager
gameDetailsList.clear();
targetDir = null;
favFormat = false;
deleteBeforeExport = false;
}
}