feat: New menu option to edit primary joy port for multiple games
This commit is contained in:
parent
febe34ce49
commit
5024f60ddd
|
@ -333,7 +333,7 @@ public class DbConnector
|
||||||
Integer.toString(rs.getInt("rowid")),
|
Integer.toString(rs.getInt("rowid")),
|
||||||
rs.getInt("Favorite"),
|
rs.getInt("Favorite"),
|
||||||
viewTag != null && viewTag.contains("GIS:"));
|
viewTag != null && viewTag.contains("GIS:"));
|
||||||
|
|
||||||
//For filtering
|
//For filtering
|
||||||
data.setComposer(rs.getString("Composer"));
|
data.setComposer(rs.getString("Composer"));
|
||||||
data.setAuthor(rs.getString("Author"));
|
data.setAuthor(rs.getString("Author"));
|
||||||
|
@ -469,13 +469,12 @@ public class DbConnector
|
||||||
{
|
{
|
||||||
ExceptionHandler.handleException(e, "Could not fetch title by id");
|
ExceptionHandler.handleException(e, "Could not fetch title by id");
|
||||||
}
|
}
|
||||||
|
|
||||||
String oldViewName = viewNumber > 1 ? originalViewName + "/" + viewNumber : originalViewName;
|
String oldViewName = viewNumber > 1 ? originalViewName + "/" + viewNumber : originalViewName;
|
||||||
|
|
||||||
//Always use "0" as for first view (sorting is a bit random...)
|
//Always use "0" as for first view (sorting is a bit random...)
|
||||||
String firstGameLetter = viewNumber == 1 ? "0" : firstGameTitle.substring(0, 1).toUpperCase();
|
String firstGameLetter = viewNumber == 1 ? "0" : firstGameTitle.substring(0, 1).toUpperCase();
|
||||||
String newViewName = originalViewName + "/" + firstGameLetter + "-" +
|
String newViewName = originalViewName + "/" + firstGameLetter + "-" + lastGameTitle.substring(0, 1).toUpperCase();
|
||||||
lastGameTitle.substring(0, 1).toUpperCase();
|
|
||||||
|
|
||||||
sqlBuilder = new StringBuilder();
|
sqlBuilder = new StringBuilder();
|
||||||
sqlBuilder.append("");
|
sqlBuilder.append("");
|
||||||
|
@ -1474,12 +1473,12 @@ public class DbConnector
|
||||||
ExceptionHandler.handleException(e, "Could not delete games in db.");
|
ExceptionHandler.handleException(e, "Could not delete games in db.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteGames(List<GameListData> selectedGameListData)
|
public void deleteGames(List<GameListData> selectedGameListData)
|
||||||
{
|
{
|
||||||
List<String> idList = selectedGameListData.stream().map(data -> data.getGameId()).collect(Collectors.toList());
|
List<String> idList = selectedGameListData.stream().map(data -> data.getGameId()).collect(Collectors.toList());
|
||||||
String idsString = String.join(",", idList);
|
String idsString = String.join(",", idList);
|
||||||
|
|
||||||
String sql = "DELETE FROM gameinfo where rowId IN (" + idsString + ");";
|
String sql = "DELETE FROM gameinfo where rowId IN (" + idsString + ");";
|
||||||
logger.debug("Generated DELETE String:\n{}", sql);
|
logger.debug("Generated DELETE String:\n{}", sql);
|
||||||
try (Connection conn = this.connect(); PreparedStatement pstmt = conn.prepareStatement(sql))
|
try (Connection conn = this.connect(); PreparedStatement pstmt = conn.prepareStatement(sql))
|
||||||
|
@ -1687,6 +1686,41 @@ public class DbConnector
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updatePrimaryJoystickPort(List<String> idList, boolean port1)
|
||||||
|
{
|
||||||
|
String joy1Default = "J:1*:";
|
||||||
|
String joy1NotDefault = "J:1:";
|
||||||
|
String joy2Default = "J:2*:";
|
||||||
|
String joy2NotDefault = "J:2:";
|
||||||
|
|
||||||
|
String idListString = String.join(",", idList);
|
||||||
|
StringBuilder sqlBuilder = new StringBuilder();
|
||||||
|
|
||||||
|
String expression = String
|
||||||
|
.format("UPDATE gameinfo SET Joy1Config = REPLACE(Joy1Config, '%s', '%s'),Joy2Config = REPLACE(Joy2Config, '%s', '%s') WHERE rowId IN (",
|
||||||
|
port1 ? joy1NotDefault : joy1Default,
|
||||||
|
port1 ? joy1Default : joy1NotDefault,
|
||||||
|
port1 ? joy2Default : joy2NotDefault,
|
||||||
|
port1 ? joy2NotDefault : joy2Default
|
||||||
|
);
|
||||||
|
|
||||||
|
sqlBuilder.append(expression);
|
||||||
|
sqlBuilder.append(idListString);
|
||||||
|
sqlBuilder.append(");");
|
||||||
|
|
||||||
|
logger.debug("Generated SQL for primary joy ports:\n{}", sqlBuilder.toString());
|
||||||
|
|
||||||
|
try (Connection conn = this.connect(); PreparedStatement joy1tmt = conn.prepareStatement(sqlBuilder.toString());)
|
||||||
|
{
|
||||||
|
int value = joy1tmt.executeUpdate();
|
||||||
|
logger.debug("Executed successfully, value = {}", value);
|
||||||
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
ExceptionHandler.handleException(e, "Could not update primary joystick port");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setAccurateDiskForView(GameView view, boolean accurateDisk)
|
public void setAccurateDiskForView(GameView view, boolean accurateDisk)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.swing.JEditorPane;
|
import javax.swing.JEditorPane;
|
||||||
import javax.swing.JMenu;
|
import javax.swing.JMenu;
|
||||||
|
@ -111,6 +112,7 @@ public class MenuManager
|
||||||
private JMenuItem clearFavorites10Item;
|
private JMenuItem clearFavorites10Item;
|
||||||
|
|
||||||
private JMenuItem editViewTagItem;
|
private JMenuItem editViewTagItem;
|
||||||
|
private JMenuItem editPrimaryJoystickItem;
|
||||||
|
|
||||||
private JMenuItem backupDbItem;
|
private JMenuItem backupDbItem;
|
||||||
private JMenuItem restoreDbItem;
|
private JMenuItem restoreDbItem;
|
||||||
|
@ -336,6 +338,7 @@ public class MenuManager
|
||||||
}
|
}
|
||||||
editMenu.addSeparator();
|
editMenu.addSeparator();
|
||||||
editMenu.add(getEditViewTagItem());
|
editMenu.add(getEditViewTagItem());
|
||||||
|
editMenu.add(getPrimaryJoystickItem());
|
||||||
return editMenu;
|
return editMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -822,6 +825,43 @@ public class MenuManager
|
||||||
return editViewTagItem;
|
return editViewTagItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JMenuItem getPrimaryJoystickItem()
|
||||||
|
{
|
||||||
|
|
||||||
|
editPrimaryJoystickItem = new JMenuItem("Edit primary Joystick...");
|
||||||
|
KeyStroke keyStrokeToEditJoy = KeyStroke.getKeyStroke(KeyEvent.VK_J, InputEvent.CTRL_DOWN_MASK);
|
||||||
|
editPrimaryJoystickItem.setAccelerator(keyStrokeToEditJoy);
|
||||||
|
editPrimaryJoystickItem.addActionListener(e -> {
|
||||||
|
if (!mainWindow.getMainPanel().isNoGameSelected())
|
||||||
|
{
|
||||||
|
PrimaryJoystickDialog dialog = new PrimaryJoystickDialog(MainWindow.getInstance());
|
||||||
|
dialog.pack();
|
||||||
|
dialog.setLocationRelativeTo(this.mainWindow);
|
||||||
|
|
||||||
|
|
||||||
|
if (dialog.showDialog())
|
||||||
|
{
|
||||||
|
mainWindow.setWaitCursor(true);
|
||||||
|
List<String> selectedGameIds = mainWindow.getMainPanel().getListPanel().getSelectedGameListData().stream()
|
||||||
|
.map(data -> data.getGameId()).collect(Collectors.toList());
|
||||||
|
|
||||||
|
uiModel.updatePrimaryJoystickPort(selectedGameIds, dialog.isPort1Primary());
|
||||||
|
|
||||||
|
mainWindow.setWaitCursor(false);
|
||||||
|
JOptionPane.showMessageDialog(MainWindow.getInstance().getMainPanel(),
|
||||||
|
"Primary joystick port updated for the selected games.",
|
||||||
|
"Primary port",
|
||||||
|
JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
if (selectedGameIds.size() == 1)
|
||||||
|
{
|
||||||
|
MainWindow.getInstance().reloadCurrentGameView();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return editPrimaryJoystickItem;
|
||||||
|
}
|
||||||
|
|
||||||
private JMenuItem getBackupDbItem()
|
private JMenuItem getBackupDbItem()
|
||||||
{
|
{
|
||||||
backupDbItem = new JMenuItem("Backup database");
|
backupDbItem = new JMenuItem("Backup database");
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package se.lantz.gui;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.Frame;
|
||||||
|
|
||||||
|
public class PrimaryJoystickDialog extends BaseDialog
|
||||||
|
{
|
||||||
|
|
||||||
|
private Dimension dialogSize = new Dimension(350, 170);
|
||||||
|
private PrimaryJoystickSelectionPanel portPanel;
|
||||||
|
|
||||||
|
public PrimaryJoystickDialog(Frame owner)
|
||||||
|
{
|
||||||
|
super(owner);
|
||||||
|
//Create a separate model so that changes can be cancelled
|
||||||
|
|
||||||
|
setTitle("Edit primary port");
|
||||||
|
addContent(getPrimaryPortPanel());
|
||||||
|
this.setPreferredSize(dialogSize);
|
||||||
|
this.setResizable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private PrimaryJoystickSelectionPanel getPrimaryPortPanel()
|
||||||
|
{
|
||||||
|
if (portPanel == null)
|
||||||
|
{
|
||||||
|
portPanel = new PrimaryJoystickSelectionPanel();
|
||||||
|
}
|
||||||
|
return portPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPort1Primary()
|
||||||
|
{
|
||||||
|
return getPrimaryPortPanel().isPort1Primary();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
package se.lantz.gui;
|
||||||
|
|
||||||
|
import java.awt.GridBagConstraints;
|
||||||
|
import java.awt.GridBagLayout;
|
||||||
|
import java.awt.Insets;
|
||||||
|
|
||||||
|
import javax.swing.ButtonGroup;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JRadioButton;
|
||||||
|
|
||||||
|
public class PrimaryJoystickSelectionPanel extends JPanel
|
||||||
|
{
|
||||||
|
private JLabel infoLabel;
|
||||||
|
private JRadioButton port1RadioButton;
|
||||||
|
private JRadioButton port2RadioButton;
|
||||||
|
private final ButtonGroup buttonGroup = new ButtonGroup();
|
||||||
|
|
||||||
|
public PrimaryJoystickSelectionPanel()
|
||||||
|
{
|
||||||
|
GridBagLayout gridBagLayout = new GridBagLayout();
|
||||||
|
setLayout(gridBagLayout);
|
||||||
|
GridBagConstraints gbc_infoLabel = new GridBagConstraints();
|
||||||
|
gbc_infoLabel.weightx = 1.0;
|
||||||
|
gbc_infoLabel.insets = new Insets(15, 5, 10, 0);
|
||||||
|
gbc_infoLabel.gridx = 0;
|
||||||
|
gbc_infoLabel.gridy = 0;
|
||||||
|
add(getInfoLabel(), gbc_infoLabel);
|
||||||
|
GridBagConstraints gbc_port1RadioButton = new GridBagConstraints();
|
||||||
|
gbc_port1RadioButton.gridx = 0;
|
||||||
|
gbc_port1RadioButton.gridy = 1;
|
||||||
|
add(getPort1RadioButton(), gbc_port1RadioButton);
|
||||||
|
GridBagConstraints gbc_port2RadioButton = new GridBagConstraints();
|
||||||
|
gbc_port2RadioButton.anchor = GridBagConstraints.NORTH;
|
||||||
|
gbc_port2RadioButton.weighty = 1.0;
|
||||||
|
gbc_port2RadioButton.gridx = 0;
|
||||||
|
gbc_port2RadioButton.gridy = 2;
|
||||||
|
add(getPort2RadioButton(), gbc_port2RadioButton);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private JLabel getInfoLabel()
|
||||||
|
{
|
||||||
|
if (infoLabel == null)
|
||||||
|
{
|
||||||
|
infoLabel = new JLabel("Select which port to set as primary for the selected games:");
|
||||||
|
}
|
||||||
|
return infoLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JRadioButton getPort1RadioButton()
|
||||||
|
{
|
||||||
|
if (port1RadioButton == null)
|
||||||
|
{
|
||||||
|
port1RadioButton = new JRadioButton("Port 1");
|
||||||
|
buttonGroup.add(port1RadioButton);
|
||||||
|
}
|
||||||
|
return port1RadioButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JRadioButton getPort2RadioButton()
|
||||||
|
{
|
||||||
|
if (port2RadioButton == null)
|
||||||
|
{
|
||||||
|
port2RadioButton = new JRadioButton("Port 2");
|
||||||
|
port2RadioButton.setSelected(true);
|
||||||
|
buttonGroup.add(port2RadioButton);
|
||||||
|
}
|
||||||
|
return port2RadioButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPort1Primary()
|
||||||
|
{
|
||||||
|
return getPort1RadioButton().isSelected();
|
||||||
|
}
|
||||||
|
}
|
|
@ -991,6 +991,14 @@ public class MainViewModel extends AbstractModel
|
||||||
gameListModel.notifyChange();
|
gameListModel.notifyChange();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPrimaryJoystick(boolean port1)
|
||||||
|
{
|
||||||
|
//Enough to toggle on joy 1 model?
|
||||||
|
getJoy1Model().setPrimary(port1);
|
||||||
|
//Save the current game
|
||||||
|
saveData();
|
||||||
|
}
|
||||||
|
|
||||||
private int toggleFavorite(GameListData data, int favoritesNumber, int favoritesCount, GameView favoritesView)
|
private int toggleFavorite(GameListData data, int favoritesNumber, int favoritesCount, GameView favoritesView)
|
||||||
{
|
{
|
||||||
|
@ -1037,6 +1045,11 @@ public class MainViewModel extends AbstractModel
|
||||||
{
|
{
|
||||||
dbConnector.resetJoystickConfigsForView(getSelectedGameView());
|
dbConnector.resetJoystickConfigsForView(getSelectedGameView());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updatePrimaryJoystickPort(List<String> gameIdList, boolean port1)
|
||||||
|
{
|
||||||
|
dbConnector.updatePrimaryJoystickPort(gameIdList, port1);
|
||||||
|
}
|
||||||
|
|
||||||
public void enableAccurateDiskForAllGamesInCurrentView()
|
public void enableAccurateDiskForAllGamesInCurrentView()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue