From 23c7c923d995479df2159f0e1bf8b45928e8e7eb Mon Sep 17 00:00:00 2001 From: lantzelot-swe <75668734+lantzelot-swe@users.noreply.github.com> Date: Mon, 22 Apr 2024 22:39:55 +0200 Subject: [PATCH] feat: Add Speedlink and NES controllers to the USB controller dialog --- .../se/lantz/gui/gamepad/GamePadDialog.java | 26 ++- .../lantz/gui/gamepad/NesBackgroundPanel.java | 66 ++++++ .../se/lantz/gui/gamepad/NesImagePanel.java | 117 +++++++++++ .../se/lantz/gui/gamepad/NesInfoPanel.java | 103 +++++++++ .../gui/gamepad/NesMappingComponent.java | 196 ++++++++++++++++++ .../se/lantz/gui/gamepad/NesMappingPanel.java | 110 ++++++++++ .../gui/gamepad/SpeedlinkBackgroundPanel.java | 66 ++++++ .../gui/gamepad/SpeedlinkImagePanel.java | 189 +++++++++++++++++ .../lantz/gui/gamepad/SpeedlinkInfoPanel.java | 103 +++++++++ .../gamepad/SpeedlinkMappingComponent.java | 196 ++++++++++++++++++ .../gui/gamepad/SpeedlinkMappingPanel.java | 131 ++++++++++++ .../gui/gamepad/TheGamepadImagePanel.java | 2 +- .../gui/gamepad/USBControllerImagePanel.java | 2 +- src/main/resources/se/lantz/nesController.png | Bin 0 -> 65439 bytes src/main/resources/se/lantz/speedlink.png | Bin 0 -> 39935 bytes 15 files changed, 1303 insertions(+), 4 deletions(-) create mode 100644 src/main/java/se/lantz/gui/gamepad/NesBackgroundPanel.java create mode 100644 src/main/java/se/lantz/gui/gamepad/NesImagePanel.java create mode 100644 src/main/java/se/lantz/gui/gamepad/NesInfoPanel.java create mode 100644 src/main/java/se/lantz/gui/gamepad/NesMappingComponent.java create mode 100644 src/main/java/se/lantz/gui/gamepad/NesMappingPanel.java create mode 100644 src/main/java/se/lantz/gui/gamepad/SpeedlinkBackgroundPanel.java create mode 100644 src/main/java/se/lantz/gui/gamepad/SpeedlinkImagePanel.java create mode 100644 src/main/java/se/lantz/gui/gamepad/SpeedlinkInfoPanel.java create mode 100644 src/main/java/se/lantz/gui/gamepad/SpeedlinkMappingComponent.java create mode 100644 src/main/java/se/lantz/gui/gamepad/SpeedlinkMappingPanel.java create mode 100644 src/main/resources/se/lantz/nesController.png create mode 100644 src/main/resources/se/lantz/speedlink.png diff --git a/src/main/java/se/lantz/gui/gamepad/GamePadDialog.java b/src/main/java/se/lantz/gui/gamepad/GamePadDialog.java index 9df8e6b..5c51af0 100644 --- a/src/main/java/se/lantz/gui/gamepad/GamePadDialog.java +++ b/src/main/java/se/lantz/gui/gamepad/GamePadDialog.java @@ -14,6 +14,8 @@ public class GamePadDialog extends BaseDialog private JTabbedPane tabbedPane; private USBControllerBackgroundPanel usbControlerBackroundPanel; private TheGamepadBackgroundPanel theGamePadBackroundPanel; + private NesBackgroundPanel nesBackroundPanel; + private SpeedlinkBackgroundPanel speedlinkBackgroundPanel; private JoystickModel model; private Dimension dialogSize = new Dimension(660, 810); @@ -22,7 +24,7 @@ public class GamePadDialog extends BaseDialog super(owner); //Create a separate model so that changes can be cancelled this.model = new JoystickModel(model.isPort1()); - setTitle("Edit THEGamepad/USB Controller configuration"); + setTitle("Edit USB Controller configuration"); addContent(getTabbedPane()); this.setPreferredSize(dialogSize); this.setResizable(false); @@ -47,7 +49,25 @@ public class GamePadDialog extends BaseDialog } return theGamePadBackroundPanel; } - + + private NesBackgroundPanel getNesBackroundPanel() + { + if (nesBackroundPanel == null) + { + nesBackroundPanel = new NesBackgroundPanel(model); + } + return nesBackroundPanel; + } + + private SpeedlinkBackgroundPanel getSpeedlinkBackroundPanel() + { + if (speedlinkBackgroundPanel == null) + { + speedlinkBackgroundPanel = new SpeedlinkBackgroundPanel(model); + } + return speedlinkBackgroundPanel; + } + public String getJoyConfigString() { return this.model.getConfigString(); @@ -59,6 +79,8 @@ public class GamePadDialog extends BaseDialog { tabbedPane = new JTabbedPane(); tabbedPane.addTab("THEGamepad", getTheGamepadBackgroundPanel()); + tabbedPane.addTab("Speedlink Comp. Pro", getSpeedlinkBackroundPanel()); + tabbedPane.addTab("NES controller", getNesBackroundPanel()); tabbedPane.addTab("Alternative USB controller", getUSBControllerBackgroundPanel()); } return tabbedPane; diff --git a/src/main/java/se/lantz/gui/gamepad/NesBackgroundPanel.java b/src/main/java/se/lantz/gui/gamepad/NesBackgroundPanel.java new file mode 100644 index 0000000..5cfb059 --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/NesBackgroundPanel.java @@ -0,0 +1,66 @@ +package se.lantz.gui.gamepad; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; + +import javax.swing.JPanel; + +import se.lantz.model.JoystickModel; + +public class NesBackgroundPanel extends JPanel +{ + private NesInfoPanel gamePadInfoPanel; + private NesImagePanel gamePadImagePanel; + private NesMappingPanel gamePadMappingPanel; + private JoystickModel model; + public NesBackgroundPanel(JoystickModel model) { + this.model = model; + GridBagLayout gridBagLayout = new GridBagLayout(); + setLayout(gridBagLayout); + GridBagConstraints gbc_gamePadInfoPanel = new GridBagConstraints(); + gbc_gamePadInfoPanel.gridwidth = 2; + gbc_gamePadInfoPanel.insets = new Insets(0, 0, 5, 0); + gbc_gamePadInfoPanel.anchor = GridBagConstraints.NORTHWEST; + gbc_gamePadInfoPanel.weightx = 1.0; + gbc_gamePadInfoPanel.fill = GridBagConstraints.BOTH; + gbc_gamePadInfoPanel.gridx = 0; + gbc_gamePadInfoPanel.gridy = 0; + add(getGamePadInfoPanel(), gbc_gamePadInfoPanel); + GridBagConstraints gbc_gamePadImagePanel = new GridBagConstraints(); + gbc_gamePadImagePanel.anchor = GridBagConstraints.NORTHWEST; + gbc_gamePadImagePanel.insets = new Insets(0, 0, 5, 10); + gbc_gamePadImagePanel.weightx = 1.0; + gbc_gamePadImagePanel.fill = GridBagConstraints.BOTH; + gbc_gamePadImagePanel.gridx = 1; + gbc_gamePadImagePanel.gridy = 1; + add(getNesImagePanel(), gbc_gamePadImagePanel); + GridBagConstraints gbc_gamePadMappingPanel = new GridBagConstraints(); + gbc_gamePadMappingPanel.insets = new Insets(0, 10, 0, 0); + gbc_gamePadMappingPanel.weighty = 1.0; + gbc_gamePadMappingPanel.weightx = 1.0; + gbc_gamePadMappingPanel.anchor = GridBagConstraints.NORTHWEST; + gbc_gamePadMappingPanel.fill = GridBagConstraints.BOTH; + gbc_gamePadMappingPanel.gridx = 0; + gbc_gamePadMappingPanel.gridy = 1; + add(getNesMappingPanel(), gbc_gamePadMappingPanel); + } + private NesInfoPanel getGamePadInfoPanel() { + if (gamePadInfoPanel == null) { + gamePadInfoPanel = new NesInfoPanel(); + } + return gamePadInfoPanel; + } + private NesImagePanel getNesImagePanel() { + if (gamePadImagePanel == null) { + gamePadImagePanel = new NesImagePanel(); + } + return gamePadImagePanel; + } + private NesMappingPanel getNesMappingPanel() { + if (gamePadMappingPanel == null) { + gamePadMappingPanel = new NesMappingPanel(model, getNesImagePanel()); + } + return gamePadMappingPanel; + } +} diff --git a/src/main/java/se/lantz/gui/gamepad/NesImagePanel.java b/src/main/java/se/lantz/gui/gamepad/NesImagePanel.java new file mode 100644 index 0000000..dfa8564 --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/NesImagePanel.java @@ -0,0 +1,117 @@ +package se.lantz.gui.gamepad; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; + +public class NesImagePanel extends JPanel +{ + public enum NesButton + { + UP("Up", Character.toString(0x1f815)), DOWN("Down", Character.toString(0x1f817)), + LEFT("Left", Character.toString(0x1f814)), RIGHT("Right", Character.toString(0x1f816)), A("A", "Left fire"), B("B", "TL"), + START("Start", "B"); + + public final String label; + public final String joyMapping; + + private NesButton(String label, String joyMapping) + { + this.label = label; + this.joyMapping = joyMapping; + } + } + + ImageIcon gamepadImage = new ImageIcon(getClass().getResource("/se/lantz/nesController.png")); + private JLabel imageLabel; + + private NesButton currentButton = null; + + public NesImagePanel() + { + GridBagLayout gridBagLayout = new GridBagLayout(); + setLayout(gridBagLayout); + GridBagConstraints gbc_imageLabel = new GridBagConstraints(); + gbc_imageLabel.insets = new Insets(20, 0, 0, 0); + gbc_imageLabel.weightx = 1.0; + gbc_imageLabel.weighty = 1.0; + gbc_imageLabel.anchor = GridBagConstraints.NORTH; + gbc_imageLabel.gridx = 0; + gbc_imageLabel.gridy = 0; + add(getImageLabel(), gbc_imageLabel); + } + + private JLabel getImageLabel() + { + if (imageLabel == null) + { + imageLabel = new JLabel() + { + + @Override + protected void paintComponent(Graphics g) + { + super.paintComponent(g); + //Draw for currently focused button + drawForButton(g); + } + + }; + imageLabel.setIcon(gamepadImage); + } + return imageLabel; + } + + public void setCurrentButtonAndRepaint(NesButton button) + { + this.currentButton = button; + this.repaint(); + } + + private void drawForButton(Graphics g) + { + if (currentButton == null) + { + return; + } + + Graphics2D graphics2D = (Graphics2D) g; + graphics2D.setStroke(new BasicStroke(3.0f)); + graphics2D.setColor(Color.green); + + switch (currentButton) + { + case UP: + graphics2D.fillRect(51, 78, 22, 20); + break; + case DOWN: + graphics2D.fillRect(51, 118, 22, 20); + break; + case LEFT: + graphics2D.fillRect(32, 98, 22, 20); + break; + case RIGHT: + graphics2D.fillRect(70, 98, 22, 20); + break; + case A: + graphics2D.fillRect(254, 108, 30, 30); + break; + case B: + graphics2D.fillRect(214, 108, 30, 30); + break; + case START: + graphics2D.fillRect(163, 116, 25, 15); + break; + default: + break; + } + } +} diff --git a/src/main/java/se/lantz/gui/gamepad/NesInfoPanel.java b/src/main/java/se/lantz/gui/gamepad/NesInfoPanel.java new file mode 100644 index 0000000..58dbfdf --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/NesInfoPanel.java @@ -0,0 +1,103 @@ +package se.lantz.gui.gamepad; + +import java.awt.Color; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextArea; + +public class NesInfoPanel extends JPanel +{ + private static final String dbControllerString = "030000001008000001e5000010010000,NEXT SNES Controller,lefttrigger:b2,righttrigger:b1,b:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b8,x:b3,y:b0,platform:Linux,"; + + private JLabel infoLabel; + private JTextArea controlerConfTextField; + private JLabel extraButtonsInfoLabel; + private JButton copyButton; + + public NesInfoPanel() + { + setBackground(Color.WHITE); + GridBagLayout gridBagLayout = new GridBagLayout(); + setLayout(gridBagLayout); + GridBagConstraints gbc_infoLabel = new GridBagConstraints(); + gbc_infoLabel.fill = GridBagConstraints.HORIZONTAL; + gbc_infoLabel.weightx = 1.0; + gbc_infoLabel.insets = new Insets(0, 10, 0, 10); + gbc_infoLabel.gridx = 0; + gbc_infoLabel.gridy = 0; + add(getInfoLabel(), gbc_infoLabel); + GridBagConstraints gbc_compImageLabel = new GridBagConstraints(); + gbc_compImageLabel.anchor = GridBagConstraints.NORTHWEST; + gbc_compImageLabel.fill = GridBagConstraints.HORIZONTAL; + gbc_compImageLabel.insets = new Insets(0, 10, 5, 10); + gbc_compImageLabel.weightx = 1.0; + gbc_compImageLabel.gridx = 0; + gbc_compImageLabel.gridy = 1; + add(getCompImageLabel(), gbc_compImageLabel); + GridBagConstraints gbc_copyButton = new GridBagConstraints(); + gbc_copyButton.weighty = 1.0; + gbc_copyButton.anchor = GridBagConstraints.NORTHEAST; + gbc_copyButton.insets = new Insets(0, 5, 5, 5); + gbc_copyButton.gridx = 0; + gbc_copyButton.gridy = 2; + add(getCopyButton(), gbc_copyButton); + GridBagConstraints gbc_extraButtonsInfoLabel = new GridBagConstraints(); + gbc_extraButtonsInfoLabel.insets = new Insets(0, 10, 10, 10); + gbc_extraButtonsInfoLabel.fill = GridBagConstraints.HORIZONTAL; + gbc_extraButtonsInfoLabel.gridx = 0; + gbc_extraButtonsInfoLabel.gridy = 3; + add(getExtraButtonsInfoLabel(), gbc_extraButtonsInfoLabel); + } + + private JLabel getInfoLabel() + { + if (infoLabel == null) + { + infoLabel = + new JLabel("

Nintendo NES USB controller

Inspired by original consoles that changed gaming history forever, these NES-inspired USB button-bashers work great with TheC64 and TheVIC20.

The following string in gamecontrollerdb.txt maps the buttons below:

"); + } + return infoLabel; + } + + private JTextArea getCompImageLabel() + { + if (controlerConfTextField == null) + { + controlerConfTextField = new JTextArea(); + controlerConfTextField.setBackground(Color.WHITE); + controlerConfTextField.setEditable(false); + controlerConfTextField.setText(dbControllerString); + controlerConfTextField.setLineWrap(true); + } + return controlerConfTextField; + } + + private JLabel getExtraButtonsInfoLabel() + { + if (extraButtonsInfoLabel == null) + { + extraButtonsInfoLabel = + new JLabel("
Below are the functions for THEC64 Joystick shown in parenthesis for comparison.
"); + } + return extraButtonsInfoLabel; + } + private JButton getCopyButton() { + if (copyButton == null) { + copyButton = new JButton("Copy to clipboard"); + copyButton.addActionListener(e -> { + StringSelection stringSelection = new StringSelection(dbControllerString); + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + clipboard.setContents(stringSelection, null); + }); + } + return copyButton; + } +} diff --git a/src/main/java/se/lantz/gui/gamepad/NesMappingComponent.java b/src/main/java/se/lantz/gui/gamepad/NesMappingComponent.java new file mode 100644 index 0000000..6c1c950 --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/NesMappingComponent.java @@ -0,0 +1,196 @@ +package se.lantz.gui.gamepad; + +import java.awt.Component; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.KeyboardFocusManager; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.beans.Beans; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +import se.lantz.gui.KeySelectionComboBox; +import se.lantz.gui.gamepad.NesImagePanel.NesButton; +import se.lantz.model.JoystickModel; + +public class NesMappingComponent extends JPanel +{ + private JLabel buttonTextLabel; + private KeySelectionComboBox keySelectionComboBox; + private JLabel joyMapLabel; + private NesButton button; + private JoystickModel model; + private NesImagePanel imagePanel; + + public NesMappingComponent(NesButton button, JoystickModel model, NesImagePanel imagePanel) + { + this.button = button; + this.model = model; + this.imagePanel = imagePanel; + GridBagLayout gridBagLayout = new GridBagLayout(); + setLayout(gridBagLayout); + GridBagConstraints gbc_buttonTextLabel = new GridBagConstraints(); + gbc_buttonTextLabel.anchor = GridBagConstraints.WEST; + gbc_buttonTextLabel.insets = new Insets(5, 5, 0, 5); + gbc_buttonTextLabel.gridx = 0; + gbc_buttonTextLabel.gridy = 0; + add(getButtonTextLabel(), gbc_buttonTextLabel); + GridBagConstraints gbc_keySelectionComboBox = new GridBagConstraints(); + gbc_keySelectionComboBox.weighty = 1.0; + gbc_keySelectionComboBox.gridwidth = 2; + gbc_keySelectionComboBox.insets = new Insets(0, 4, 5, 5); + gbc_keySelectionComboBox.anchor = GridBagConstraints.NORTHWEST; + gbc_keySelectionComboBox.gridx = 0; + gbc_keySelectionComboBox.gridy = 1; + add(getKeySelectionComboBox(), gbc_keySelectionComboBox); + GridBagConstraints gbc_joyMapLabel = new GridBagConstraints(); + gbc_joyMapLabel.anchor = GridBagConstraints.WEST; + gbc_joyMapLabel.weightx = 1.0; + gbc_joyMapLabel.insets = new Insets(5, 0, 0, 5); + gbc_joyMapLabel.gridx = 1; + gbc_joyMapLabel.gridy = 0; + add(getJoyMapLabel(), gbc_joyMapLabel); + + if (!Beans.isDesignTime()) + { + model.addPropertyChangeListener((e) -> modelChanged()); + } + } + + private void modelChanged() + { + switch (button) + { + case UP: + getKeySelectionComboBox().setSelectedCode(model.getUp()); + break; + case DOWN: + getKeySelectionComboBox().setSelectedCode(model.getDown()); + break; + case LEFT: + getKeySelectionComboBox().setSelectedCode(model.getLeft()); + break; + case RIGHT: + getKeySelectionComboBox().setSelectedCode(model.getRight()); + break; + case A: + getKeySelectionComboBox().setSelectedCode(model.getLeftFire()); + break; + case B: + getKeySelectionComboBox().setSelectedCode(model.getTl()); + break; + case START: + getKeySelectionComboBox().setSelectedCode(model.getB()); + break; + default: + break; + } + } + + private JLabel getButtonTextLabel() + { + if (buttonTextLabel == null) + { + buttonTextLabel = new JLabel(button.label); + } + return buttonTextLabel; + } + + private KeySelectionComboBox getKeySelectionComboBox() + { + if (keySelectionComboBox == null) + { + keySelectionComboBox = new KeySelectionComboBox(model); + keySelectionComboBox.addActionListener(e -> { + switch (button) + { + case UP: + model.setUp(keySelectionComboBox.getSelectedCode()); + break; + case DOWN: + model.setDown(keySelectionComboBox.getSelectedCode()); + break; + case LEFT: + model.setLeft(keySelectionComboBox.getSelectedCode()); + break; + case RIGHT: + model.setRight(keySelectionComboBox.getSelectedCode()); + break; + case B: + model.setTl(keySelectionComboBox.getSelectedCode()); + break; + case A: + model.setLeftFire(keySelectionComboBox.getSelectedCode()); + break; + case START: + model.setB(keySelectionComboBox.getSelectedCode()); + break; + + default: + break; + } + }); + keySelectionComboBox.addMouseListener(new MouseAdapter() + { + @Override + public void mouseExited(MouseEvent e) + { + if (!keySelectionComboBox.hasFocus()) + { + Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + if (focusOwner instanceof KeySelectionComboBox) + { + NesMappingComponent focusedMappingComponent = + (NesMappingComponent) SwingUtilities.getAncestorOfClass(NesMappingComponent.class, focusOwner); + if (focusedMappingComponent != null) + { + imagePanel.setCurrentButtonAndRepaint(focusedMappingComponent.button); + } + } + else + { + imagePanel.setCurrentButtonAndRepaint(null); + } + } + } + + @Override + public void mouseEntered(MouseEvent me) + { + imagePanel.setCurrentButtonAndRepaint(button); + } + }); + keySelectionComboBox.addFocusListener(new FocusAdapter() + { + @Override + public void focusGained(FocusEvent e) + { + imagePanel.setCurrentButtonAndRepaint(button); + } + + @Override + public void focusLost(FocusEvent e) + { + imagePanel.setCurrentButtonAndRepaint(null); + } + }); + } + return keySelectionComboBox; + } + + private JLabel getJoyMapLabel() + { + if (joyMapLabel == null) + { + joyMapLabel = new JLabel("(" + button.joyMapping + ")"); + } + return joyMapLabel; + } + +} diff --git a/src/main/java/se/lantz/gui/gamepad/NesMappingPanel.java b/src/main/java/se/lantz/gui/gamepad/NesMappingPanel.java new file mode 100644 index 0000000..4e2abd1 --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/NesMappingPanel.java @@ -0,0 +1,110 @@ +package se.lantz.gui.gamepad; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; + +import javax.swing.JPanel; + +import se.lantz.gui.gamepad.NesImagePanel.NesButton; +import se.lantz.model.JoystickModel; + +public class NesMappingPanel extends JPanel +{ + private NesMappingComponent upComponent; + private JoystickModel model; + private NesMappingComponent downComponent; + private NesMappingComponent leftComponent; + private NesMappingComponent rightComponent; + private NesMappingComponent xComponent; + private NesMappingComponent aComponent; + private NesMappingComponent bComponent; + private NesImagePanel imagePanel; + + public NesMappingPanel(JoystickModel model, NesImagePanel imagePanel) + { + this.model = model; + this.imagePanel = imagePanel; + GridBagLayout gridBagLayout = new GridBagLayout(); + gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0}; + gridBagLayout.columnWeights = new double[]{1.0, 1.0}; + setLayout(gridBagLayout); + GridBagConstraints gbc_upComponent = new GridBagConstraints(); + gbc_upComponent.fill = GridBagConstraints.BOTH; + gbc_upComponent.gridx = 0; + gbc_upComponent.gridy = 0; + add(getUpComponent(), gbc_upComponent); + GridBagConstraints gbc_downgComponent = new GridBagConstraints(); + gbc_downgComponent.fill = GridBagConstraints.BOTH; + gbc_downgComponent.gridx = 0; + gbc_downgComponent.gridy = 1; + add(getDowngComponent(), gbc_downgComponent); + GridBagConstraints gbc_leftComponent = new GridBagConstraints(); + gbc_leftComponent.fill = GridBagConstraints.BOTH; + gbc_leftComponent.gridx = 0; + gbc_leftComponent.gridy = 2; + add(getMappingComponent_2(), gbc_leftComponent); + GridBagConstraints gbc_rightComponent = new GridBagConstraints(); + gbc_rightComponent.weighty = 1.0; + gbc_rightComponent.fill = GridBagConstraints.BOTH; + gbc_rightComponent.gridx = 0; + gbc_rightComponent.gridy = 3; + add(getRightComponent(), gbc_rightComponent); + GridBagConstraints gbc_xComponent = new GridBagConstraints(); + gbc_xComponent.fill = GridBagConstraints.BOTH; + gbc_xComponent.gridx = 1; + gbc_xComponent.gridy = 2; + add(getXComponent(), gbc_xComponent); + GridBagConstraints gbc_aComponent = new GridBagConstraints(); + gbc_aComponent.fill = GridBagConstraints.BOTH; + gbc_aComponent.gridx = 1; + gbc_aComponent.gridy = 0; + add(getAComponent(), gbc_aComponent); + GridBagConstraints gbc_bComponent = new GridBagConstraints(); + gbc_bComponent.fill = GridBagConstraints.BOTH; + gbc_bComponent.gridx = 1; + gbc_bComponent.gridy = 1; + add(getBComponent(), gbc_bComponent); + } + private NesMappingComponent getUpComponent() { + if (upComponent == null) { + upComponent = new NesMappingComponent(NesButton.UP, model, imagePanel); + } + return upComponent; + } + private NesMappingComponent getDowngComponent() { + if (downComponent == null) { + downComponent = new NesMappingComponent(NesButton.DOWN, model, imagePanel); + } + return downComponent; + } + private NesMappingComponent getMappingComponent_2() { + if (leftComponent == null) { + leftComponent = new NesMappingComponent(NesButton.LEFT, model, imagePanel); + } + return leftComponent; + } + private NesMappingComponent getRightComponent() { + if (rightComponent == null) { + rightComponent = new NesMappingComponent(NesButton.RIGHT, model, imagePanel); + } + return rightComponent; + } + private NesMappingComponent getXComponent() { + if (xComponent == null) { + xComponent = new NesMappingComponent(NesButton.START, model, imagePanel); + } + return xComponent; + } + private NesMappingComponent getAComponent() { + if (aComponent == null) { + aComponent = new NesMappingComponent(NesButton.A, model, imagePanel); + } + return aComponent; + } + private NesMappingComponent getBComponent() { + if (bComponent == null) { + bComponent = new NesMappingComponent(NesButton.B, model, imagePanel); + } + return bComponent; + } +} diff --git a/src/main/java/se/lantz/gui/gamepad/SpeedlinkBackgroundPanel.java b/src/main/java/se/lantz/gui/gamepad/SpeedlinkBackgroundPanel.java new file mode 100644 index 0000000..19ffe02 --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/SpeedlinkBackgroundPanel.java @@ -0,0 +1,66 @@ +package se.lantz.gui.gamepad; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; + +import javax.swing.JPanel; + +import se.lantz.model.JoystickModel; + +public class SpeedlinkBackgroundPanel extends JPanel +{ + private SpeedlinkInfoPanel gamePadInfoPanel; + private SpeedlinkImagePanel gamePadImagePanel; + private SpeedlinkMappingPanel gamePadMappingPanel; + private JoystickModel model; + public SpeedlinkBackgroundPanel(JoystickModel model) { + this.model = model; + GridBagLayout gridBagLayout = new GridBagLayout(); + setLayout(gridBagLayout); + GridBagConstraints gbc_gamePadInfoPanel = new GridBagConstraints(); + gbc_gamePadInfoPanel.gridwidth = 2; + gbc_gamePadInfoPanel.insets = new Insets(0, 0, 5, 0); + gbc_gamePadInfoPanel.anchor = GridBagConstraints.NORTHWEST; + gbc_gamePadInfoPanel.weightx = 1.0; + gbc_gamePadInfoPanel.fill = GridBagConstraints.BOTH; + gbc_gamePadInfoPanel.gridx = 0; + gbc_gamePadInfoPanel.gridy = 0; + add(getGamePadInfoPanel(), gbc_gamePadInfoPanel); + GridBagConstraints gbc_gamePadImagePanel = new GridBagConstraints(); + gbc_gamePadImagePanel.anchor = GridBagConstraints.NORTHWEST; + gbc_gamePadImagePanel.insets = new Insets(0, 0, 5, 10); + gbc_gamePadImagePanel.weightx = 1.0; + gbc_gamePadImagePanel.fill = GridBagConstraints.BOTH; + gbc_gamePadImagePanel.gridx = 1; + gbc_gamePadImagePanel.gridy = 1; + add(getSpeedlinkImagePanel(), gbc_gamePadImagePanel); + GridBagConstraints gbc_gamePadMappingPanel = new GridBagConstraints(); + gbc_gamePadMappingPanel.insets = new Insets(0, 10, 0, 0); + gbc_gamePadMappingPanel.weighty = 1.0; + gbc_gamePadMappingPanel.weightx = 1.0; + gbc_gamePadMappingPanel.anchor = GridBagConstraints.NORTHWEST; + gbc_gamePadMappingPanel.fill = GridBagConstraints.BOTH; + gbc_gamePadMappingPanel.gridx = 0; + gbc_gamePadMappingPanel.gridy = 1; + add(getSpeedlinkMappingPanel(), gbc_gamePadMappingPanel); + } + private SpeedlinkInfoPanel getGamePadInfoPanel() { + if (gamePadInfoPanel == null) { + gamePadInfoPanel = new SpeedlinkInfoPanel(); + } + return gamePadInfoPanel; + } + private SpeedlinkImagePanel getSpeedlinkImagePanel() { + if (gamePadImagePanel == null) { + gamePadImagePanel = new SpeedlinkImagePanel(); + } + return gamePadImagePanel; + } + private SpeedlinkMappingPanel getSpeedlinkMappingPanel() { + if (gamePadMappingPanel == null) { + gamePadMappingPanel = new SpeedlinkMappingPanel(model, getSpeedlinkImagePanel()); + } + return gamePadMappingPanel; + } +} diff --git a/src/main/java/se/lantz/gui/gamepad/SpeedlinkImagePanel.java b/src/main/java/se/lantz/gui/gamepad/SpeedlinkImagePanel.java new file mode 100644 index 0000000..7adabea --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/SpeedlinkImagePanel.java @@ -0,0 +1,189 @@ +package se.lantz.gui.gamepad; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.Polygon; +import java.awt.Stroke; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.Line2D; +import java.awt.geom.Point2D; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; + +public class SpeedlinkImagePanel extends JPanel +{ + public enum SpeedlinkButton + { + UP("Up", Character.toString(0x1f815)), DOWN("Down", Character.toString(0x1f817)), + LEFT("Left", Character.toString(0x1f814)), RIGHT("Right", Character.toString(0x1f816)), LEFT_FIRE("Left fire", "Left fire"), + RIGHT_FIRE("Right Fire", "A"), LT("Left triangle", "B"); + + public final String label; + public final String joyMapping; + + private SpeedlinkButton(String label, String joyMapping) + { + this.label = label; + this.joyMapping = joyMapping; + } + } + + ImageIcon gamepadImage = new ImageIcon(getClass().getResource("/se/lantz/speedlink.png")); + private JLabel imageLabel; + + private SpeedlinkButton currentButton = null; + + public SpeedlinkImagePanel() + { + GridBagLayout gridBagLayout = new GridBagLayout(); + setLayout(gridBagLayout); + GridBagConstraints gbc_imageLabel = new GridBagConstraints(); + gbc_imageLabel.insets = new Insets(20, 0, 0, 0); + gbc_imageLabel.weightx = 1.0; + gbc_imageLabel.weighty = 1.0; + gbc_imageLabel.anchor = GridBagConstraints.NORTH; + gbc_imageLabel.gridx = 0; + gbc_imageLabel.gridy = 0; + add(getImageLabel(), gbc_imageLabel); + } + + private JLabel getImageLabel() + { + if (imageLabel == null) + { + imageLabel = new JLabel() + { + + @Override + protected void paintComponent(Graphics g) + { + super.paintComponent(g); + //Draw for currently focused button + drawForButton(g); + } + + }; + imageLabel.setIcon(gamepadImage); + } + return imageLabel; + } + + public void setCurrentButtonAndRepaint(SpeedlinkButton button) + { + this.currentButton = button; + this.repaint(); + } + + private void drawForButton(Graphics g) + { + if (currentButton == null) + { + return; + } + + Graphics2D graphics2D = (Graphics2D) g; + graphics2D.setStroke(new BasicStroke(3.0f)); + graphics2D.setColor(Color.green); + + switch (currentButton) + { + case UP: + drawArrow(graphics2D, + new Point2D.Double(77, 50), + new Point2D.Double(77, 5), + new BasicStroke(3.0f), + new BasicStroke(1.0f), + 25f); + break; + case DOWN: + drawArrow(graphics2D, + new Point2D.Double(77, 5), + new Point2D.Double(77, 50), + new BasicStroke(3.0f), + new BasicStroke(1.0f), + 25f); + break; + case LEFT: + drawArrow(graphics2D, + new Point2D.Double(100, 25), + new Point2D.Double(55, 25), + new BasicStroke(3.0f), + new BasicStroke(1.0f), + 25f); + break; + case RIGHT: + drawArrow(graphics2D, + new Point2D.Double(55, 25), + new Point2D.Double(100, 25), + new BasicStroke(3.0f), + new BasicStroke(1.0f), + 25f); + break; + case LEFT_FIRE: + graphics2D.fillOval(18, 82, 35, 17); + break; + case RIGHT_FIRE: + graphics2D.fillOval(97, 82, 35, 17); + break; + case LT: + graphics2D.fillRect(30, 100, 15, 10); + break; + default: + break; + } + } + + private void drawArrow(final Graphics2D gfx, + final Point2D start, + final Point2D end, + final Stroke lineStroke, + final Stroke arrowStroke, + final float arrowSize) + { + + final double startx = start.getX(); + final double starty = start.getY(); + + gfx.setStroke(arrowStroke); + final double deltax = startx - end.getX(); + final double result; + if (deltax == 0.0d) + { + result = starty < end.getY() ? -(Math.PI / 2) : (Math.PI / 2); + } + else + { + result = Math.atan((starty - end.getY()) / deltax) + (startx < end.getX() ? Math.PI : 0); + } + + final double angle = result; + + final double arrowAngle = Math.PI / 12.0d; + + final double x1 = arrowSize * Math.cos(angle - arrowAngle); + final double y1 = arrowSize * Math.sin(angle - arrowAngle); + final double x2 = arrowSize * Math.cos(angle + arrowAngle); + final double y2 = arrowSize * Math.sin(angle + arrowAngle); + + final double cx = (arrowSize / 2.0f) * Math.cos(angle); + final double cy = (arrowSize / 2.0f) * Math.sin(angle); + + final GeneralPath polygon = new GeneralPath(); + polygon.moveTo(end.getX(), end.getY()); + polygon.lineTo(end.getX() + x1, end.getY() + y1); + polygon.lineTo(end.getX() + x2, end.getY() + y2); + polygon.closePath(); + gfx.fill(polygon); + + gfx.setStroke(lineStroke); + gfx.drawLine((int) startx, (int) starty, (int) (end.getX() + cx), (int) (end.getY() + cy)); + } +} diff --git a/src/main/java/se/lantz/gui/gamepad/SpeedlinkInfoPanel.java b/src/main/java/se/lantz/gui/gamepad/SpeedlinkInfoPanel.java new file mode 100644 index 0000000..0487708 --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/SpeedlinkInfoPanel.java @@ -0,0 +1,103 @@ +package se.lantz.gui.gamepad; + +import java.awt.Color; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextArea; + +public class SpeedlinkInfoPanel extends JPanel +{ + private static final String dbControllerString = "03000000790000001c18000011010000,SPEEDLINK COMPETITION PRO Game Controller for Android,a:b0,b:b4,lefttrigger:b3,leftx:a0,lefty:a1,start:b1,platform:Linux,"; + + private JLabel infoLabel; + private JTextArea controlerConfTextField; + private JLabel extraButtonsInfoLabel; + private JButton copyButton; + + public SpeedlinkInfoPanel() + { + setBackground(Color.WHITE); + GridBagLayout gridBagLayout = new GridBagLayout(); + setLayout(gridBagLayout); + GridBagConstraints gbc_infoLabel = new GridBagConstraints(); + gbc_infoLabel.fill = GridBagConstraints.HORIZONTAL; + gbc_infoLabel.weightx = 1.0; + gbc_infoLabel.insets = new Insets(0, 10, 0, 10); + gbc_infoLabel.gridx = 0; + gbc_infoLabel.gridy = 0; + add(getInfoLabel(), gbc_infoLabel); + GridBagConstraints gbc_compImageLabel = new GridBagConstraints(); + gbc_compImageLabel.anchor = GridBagConstraints.NORTHWEST; + gbc_compImageLabel.fill = GridBagConstraints.HORIZONTAL; + gbc_compImageLabel.insets = new Insets(0, 10, 5, 10); + gbc_compImageLabel.weightx = 1.0; + gbc_compImageLabel.gridx = 0; + gbc_compImageLabel.gridy = 1; + add(getCompImageLabel(), gbc_compImageLabel); + GridBagConstraints gbc_copyButton = new GridBagConstraints(); + gbc_copyButton.weighty = 1.0; + gbc_copyButton.anchor = GridBagConstraints.NORTHEAST; + gbc_copyButton.insets = new Insets(0, 5, 5, 5); + gbc_copyButton.gridx = 0; + gbc_copyButton.gridy = 2; + add(getCopyButton(), gbc_copyButton); + GridBagConstraints gbc_extraButtonsInfoLabel = new GridBagConstraints(); + gbc_extraButtonsInfoLabel.insets = new Insets(0, 10, 10, 10); + gbc_extraButtonsInfoLabel.fill = GridBagConstraints.HORIZONTAL; + gbc_extraButtonsInfoLabel.gridx = 0; + gbc_extraButtonsInfoLabel.gridy = 3; + add(getExtraButtonsInfoLabel(), gbc_extraButtonsInfoLabel); + } + + private JLabel getInfoLabel() + { + if (infoLabel == null) + { + infoLabel = + new JLabel("

Speedlink Competition Pro Extra

The COMPETITION PRO EXTRA USB joystick is an ode to nostalgic computer games. Its design with its unmistakable arcade machine stick and technology – such as the iconic micro switches with their loud click – is a throwback to the original COMPETITION PRO from the 80s, the famously popular joystick for home computers.

The following string in gamecontrollerdb.txt maps the buttons below:

"); + } + return infoLabel; + } + + private JTextArea getCompImageLabel() + { + if (controlerConfTextField == null) + { + controlerConfTextField = new JTextArea(); + controlerConfTextField.setBackground(Color.WHITE); + controlerConfTextField.setEditable(false); + controlerConfTextField.setText(dbControllerString); + controlerConfTextField.setLineWrap(true); + } + return controlerConfTextField; + } + + private JLabel getExtraButtonsInfoLabel() + { + if (extraButtonsInfoLabel == null) + { + extraButtonsInfoLabel = + new JLabel("
Below are the functions for THEC64 Joystick shown in parenthesis for comparison.
"); + } + return extraButtonsInfoLabel; + } + private JButton getCopyButton() { + if (copyButton == null) { + copyButton = new JButton("Copy to clipboard"); + copyButton.addActionListener(e -> { + StringSelection stringSelection = new StringSelection(dbControllerString); + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + clipboard.setContents(stringSelection, null); + }); + } + return copyButton; + } +} diff --git a/src/main/java/se/lantz/gui/gamepad/SpeedlinkMappingComponent.java b/src/main/java/se/lantz/gui/gamepad/SpeedlinkMappingComponent.java new file mode 100644 index 0000000..8887a91 --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/SpeedlinkMappingComponent.java @@ -0,0 +1,196 @@ +package se.lantz.gui.gamepad; + +import java.awt.Component; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.KeyboardFocusManager; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.beans.Beans; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +import se.lantz.gui.KeySelectionComboBox; +import se.lantz.gui.gamepad.SpeedlinkImagePanel.SpeedlinkButton; +import se.lantz.model.JoystickModel; + +public class SpeedlinkMappingComponent extends JPanel +{ + private JLabel buttonTextLabel; + private KeySelectionComboBox keySelectionComboBox; + private JLabel joyMapLabel; + private SpeedlinkButton button; + private JoystickModel model; + private SpeedlinkImagePanel imagePanel; + + public SpeedlinkMappingComponent(SpeedlinkButton button, JoystickModel model, SpeedlinkImagePanel imagePanel) + { + this.button = button; + this.model = model; + this.imagePanel = imagePanel; + GridBagLayout gridBagLayout = new GridBagLayout(); + setLayout(gridBagLayout); + GridBagConstraints gbc_buttonTextLabel = new GridBagConstraints(); + gbc_buttonTextLabel.anchor = GridBagConstraints.WEST; + gbc_buttonTextLabel.insets = new Insets(5, 5, 0, 5); + gbc_buttonTextLabel.gridx = 0; + gbc_buttonTextLabel.gridy = 0; + add(getButtonTextLabel(), gbc_buttonTextLabel); + GridBagConstraints gbc_keySelectionComboBox = new GridBagConstraints(); + gbc_keySelectionComboBox.weighty = 1.0; + gbc_keySelectionComboBox.gridwidth = 2; + gbc_keySelectionComboBox.insets = new Insets(0, 4, 5, 5); + gbc_keySelectionComboBox.anchor = GridBagConstraints.NORTHWEST; + gbc_keySelectionComboBox.gridx = 0; + gbc_keySelectionComboBox.gridy = 1; + add(getKeySelectionComboBox(), gbc_keySelectionComboBox); + GridBagConstraints gbc_joyMapLabel = new GridBagConstraints(); + gbc_joyMapLabel.anchor = GridBagConstraints.WEST; + gbc_joyMapLabel.weightx = 1.0; + gbc_joyMapLabel.insets = new Insets(5, 0, 0, 5); + gbc_joyMapLabel.gridx = 1; + gbc_joyMapLabel.gridy = 0; + add(getJoyMapLabel(), gbc_joyMapLabel); + + if (!Beans.isDesignTime()) + { + model.addPropertyChangeListener((e) -> modelChanged()); + } + } + + private void modelChanged() + { + switch (button) + { + case UP: + getKeySelectionComboBox().setSelectedCode(model.getUp()); + break; + case DOWN: + getKeySelectionComboBox().setSelectedCode(model.getDown()); + break; + case LEFT: + getKeySelectionComboBox().setSelectedCode(model.getLeft()); + break; + case RIGHT: + getKeySelectionComboBox().setSelectedCode(model.getRight()); + break; + case LEFT_FIRE: + getKeySelectionComboBox().setSelectedCode(model.getLeftFire()); + break; + case RIGHT_FIRE: + getKeySelectionComboBox().setSelectedCode(model.getA()); + break; + case LT: + getKeySelectionComboBox().setSelectedCode(model.getB()); + break; + default: + break; + } + } + + private JLabel getButtonTextLabel() + { + if (buttonTextLabel == null) + { + buttonTextLabel = new JLabel(button.label); + } + return buttonTextLabel; + } + + private KeySelectionComboBox getKeySelectionComboBox() + { + if (keySelectionComboBox == null) + { + keySelectionComboBox = new KeySelectionComboBox(model); + keySelectionComboBox.addActionListener(e -> { + switch (button) + { + case UP: + model.setUp(keySelectionComboBox.getSelectedCode()); + break; + case DOWN: + model.setDown(keySelectionComboBox.getSelectedCode()); + break; + case LEFT: + model.setLeft(keySelectionComboBox.getSelectedCode()); + break; + case RIGHT: + model.setRight(keySelectionComboBox.getSelectedCode()); + break; + case RIGHT_FIRE: + model.setA(keySelectionComboBox.getSelectedCode()); + break; + case LEFT_FIRE: + model.setLeftFire(keySelectionComboBox.getSelectedCode()); + break; + case LT: + model.setB(keySelectionComboBox.getSelectedCode()); + break; + + default: + break; + } + }); + keySelectionComboBox.addMouseListener(new MouseAdapter() + { + @Override + public void mouseExited(MouseEvent e) + { + if (!keySelectionComboBox.hasFocus()) + { + Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + if (focusOwner instanceof KeySelectionComboBox) + { + SpeedlinkMappingComponent focusedMappingComponent = + (SpeedlinkMappingComponent) SwingUtilities.getAncestorOfClass(SpeedlinkMappingComponent.class, focusOwner); + if (focusedMappingComponent != null) + { + imagePanel.setCurrentButtonAndRepaint(focusedMappingComponent.button); + } + } + else + { + imagePanel.setCurrentButtonAndRepaint(null); + } + } + } + + @Override + public void mouseEntered(MouseEvent me) + { + imagePanel.setCurrentButtonAndRepaint(button); + } + }); + keySelectionComboBox.addFocusListener(new FocusAdapter() + { + @Override + public void focusGained(FocusEvent e) + { + imagePanel.setCurrentButtonAndRepaint(button); + } + + @Override + public void focusLost(FocusEvent e) + { + imagePanel.setCurrentButtonAndRepaint(null); + } + }); + } + return keySelectionComboBox; + } + + private JLabel getJoyMapLabel() + { + if (joyMapLabel == null) + { + joyMapLabel = new JLabel("(" + button.joyMapping + ")"); + } + return joyMapLabel; + } + +} diff --git a/src/main/java/se/lantz/gui/gamepad/SpeedlinkMappingPanel.java b/src/main/java/se/lantz/gui/gamepad/SpeedlinkMappingPanel.java new file mode 100644 index 0000000..a46185a --- /dev/null +++ b/src/main/java/se/lantz/gui/gamepad/SpeedlinkMappingPanel.java @@ -0,0 +1,131 @@ +package se.lantz.gui.gamepad; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; + +import javax.swing.JPanel; + +import se.lantz.gui.gamepad.SpeedlinkImagePanel.SpeedlinkButton; +import se.lantz.model.JoystickModel; + +public class SpeedlinkMappingPanel extends JPanel +{ + private SpeedlinkMappingComponent upComponent; + private JoystickModel model; + private SpeedlinkMappingComponent downComponent; + private SpeedlinkMappingComponent leftComponent; + private SpeedlinkMappingComponent rightComponent; + private SpeedlinkMappingComponent xComponent; + private SpeedlinkMappingComponent aComponent; + private SpeedlinkMappingComponent bComponent; + private SpeedlinkImagePanel imagePanel; + + public SpeedlinkMappingPanel(JoystickModel model, SpeedlinkImagePanel imagePanel) + { + this.model = model; + this.imagePanel = imagePanel; + GridBagLayout gridBagLayout = new GridBagLayout(); + gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0 }; + gridBagLayout.columnWeights = new double[] { 1.0, 1.0 }; + setLayout(gridBagLayout); + GridBagConstraints gbc_upComponent = new GridBagConstraints(); + gbc_upComponent.fill = GridBagConstraints.BOTH; + gbc_upComponent.gridx = 0; + gbc_upComponent.gridy = 0; + add(getUpComponent(), gbc_upComponent); + GridBagConstraints gbc_downgComponent = new GridBagConstraints(); + gbc_downgComponent.fill = GridBagConstraints.BOTH; + gbc_downgComponent.gridx = 0; + gbc_downgComponent.gridy = 1; + add(getDowngComponent(), gbc_downgComponent); + GridBagConstraints gbc_leftComponent = new GridBagConstraints(); + gbc_leftComponent.fill = GridBagConstraints.BOTH; + gbc_leftComponent.gridx = 0; + gbc_leftComponent.gridy = 2; + add(getMappingComponent_2(), gbc_leftComponent); + GridBagConstraints gbc_rightComponent = new GridBagConstraints(); + gbc_rightComponent.weighty = 1.0; + gbc_rightComponent.fill = GridBagConstraints.BOTH; + gbc_rightComponent.gridx = 0; + gbc_rightComponent.gridy = 3; + add(getRightComponent(), gbc_rightComponent); + GridBagConstraints gbc_xComponent = new GridBagConstraints(); + gbc_xComponent.fill = GridBagConstraints.BOTH; + gbc_xComponent.gridx = 1; + gbc_xComponent.gridy = 2; + add(getXComponent(), gbc_xComponent); + GridBagConstraints gbc_aComponent = new GridBagConstraints(); + gbc_aComponent.fill = GridBagConstraints.BOTH; + gbc_aComponent.gridx = 1; + gbc_aComponent.gridy = 0; + add(getAComponent(), gbc_aComponent); + GridBagConstraints gbc_bComponent = new GridBagConstraints(); + gbc_bComponent.fill = GridBagConstraints.BOTH; + gbc_bComponent.gridx = 1; + gbc_bComponent.gridy = 1; + add(getBComponent(), gbc_bComponent); + } + + private SpeedlinkMappingComponent getUpComponent() + { + if (upComponent == null) + { + upComponent = new SpeedlinkMappingComponent(SpeedlinkButton.UP, model, imagePanel); + } + return upComponent; + } + + private SpeedlinkMappingComponent getDowngComponent() + { + if (downComponent == null) + { + downComponent = new SpeedlinkMappingComponent(SpeedlinkButton.DOWN, model, imagePanel); + } + return downComponent; + } + + private SpeedlinkMappingComponent getMappingComponent_2() + { + if (leftComponent == null) + { + leftComponent = new SpeedlinkMappingComponent(SpeedlinkButton.LEFT, model, imagePanel); + } + return leftComponent; + } + + private SpeedlinkMappingComponent getRightComponent() + { + if (rightComponent == null) + { + rightComponent = new SpeedlinkMappingComponent(SpeedlinkButton.RIGHT, model, imagePanel); + } + return rightComponent; + } + + private SpeedlinkMappingComponent getXComponent() + { + if (xComponent == null) + { + xComponent = new SpeedlinkMappingComponent(SpeedlinkButton.LT, model, imagePanel); + } + return xComponent; + } + + private SpeedlinkMappingComponent getAComponent() + { + if (aComponent == null) + { + aComponent = new SpeedlinkMappingComponent(SpeedlinkButton.LEFT_FIRE, model, imagePanel); + } + return aComponent; + } + + private SpeedlinkMappingComponent getBComponent() + { + if (bComponent == null) + { + bComponent = new SpeedlinkMappingComponent(SpeedlinkButton.RIGHT_FIRE, model, imagePanel); + } + return bComponent; + } +} diff --git a/src/main/java/se/lantz/gui/gamepad/TheGamepadImagePanel.java b/src/main/java/se/lantz/gui/gamepad/TheGamepadImagePanel.java index e60b846..9f184ff 100644 --- a/src/main/java/se/lantz/gui/gamepad/TheGamepadImagePanel.java +++ b/src/main/java/se/lantz/gui/gamepad/TheGamepadImagePanel.java @@ -85,7 +85,7 @@ public class TheGamepadImagePanel extends JPanel Graphics2D graphics2D = (Graphics2D) g; graphics2D.setStroke(new BasicStroke(3.0f)); - graphics2D.setColor(Color.red); + graphics2D.setColor(Color.green); switch (currentButton) { diff --git a/src/main/java/se/lantz/gui/gamepad/USBControllerImagePanel.java b/src/main/java/se/lantz/gui/gamepad/USBControllerImagePanel.java index 0b31547..04c6d7d 100644 --- a/src/main/java/se/lantz/gui/gamepad/USBControllerImagePanel.java +++ b/src/main/java/se/lantz/gui/gamepad/USBControllerImagePanel.java @@ -92,7 +92,7 @@ public class USBControllerImagePanel extends JPanel Graphics2D graphics2D = (Graphics2D) g; graphics2D.setStroke(new BasicStroke(3.0f)); - graphics2D.setColor(Color.red); + graphics2D.setColor(Color.green); switch (currentButton) { diff --git a/src/main/resources/se/lantz/nesController.png b/src/main/resources/se/lantz/nesController.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf5374634908a4bc92b049992ea71ee13765b51 GIT binary patch literal 65439 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/se/lantz/speedlink.png b/src/main/resources/se/lantz/speedlink.png new file mode 100644 index 0000000000000000000000000000000000000000..9b223a2438b5d8b67fb547169af5379b3072267b GIT binary patch literal 39935 zcmV*2KzF~1P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>Do0LgJK~#8N?fnOo zT-kNsjow>1bCd0Mmb^ZB+0Sn& z(6(fG*`g$ik}QfANl~OEQev7RhvWoKzyx5B(LgskcUN`gc<=lD_o?o|48cjFEX;h~ zXxuvY+!OZR|GoFw=hm$%KMX_ff6?oOUe9p0D`l@z@iq#bN~PUsgq;qRk$5bg?eTki zBe|YPF6YH!uJP-GUUzVYVX(GZyL_o}ZLYm|Ev(l(-}l-r>b*$B^VP%$*K{_LNX7<+ zl9StFQ#<05lV0@ofa~iB&UU+T@j~^{hnjO&f@VYbwHkgT5|&C{yW=Mlf->lM(TEq1 z)7VR;!dSvjW&A`UF}WkYXJ2yv!5IGfTBg?noI$74c=GY;L*HmFEe3@(FP?}XRITQ9 zI)1ASkRC@|GwOTMXxB|+(J%<;8_H#)VJ71zlabMh%!#`*$8L)x5^m(z9KGh@Y|LIQ ze)WsZ%NM-TMp&!)f#+8%xTDu>MG|p82*Y~AC*X#mpNxB9Cv3ERKusjVOwx;ZA)%OZ zG%7vx^?8Y8Vrpmht?x|j+1H)mHASysID=NJ^uT@P2kr}t1*JUgw%=@dB?>`=%gt7p zFZ)3Ncz!e<*6NXg9&e@K5BGb?n3sqXb;C{z9}Nk=nUvR)3Bewu2L}91F8AhlWZ(Ff z*PNTaR^e>r*9)Kdlg6nhy=u)Xk-=6KMa#9YSd~-ao%yl{mXwnzzuJg>;H}}zT=2|g zKa=oB`~4l;!==^E`5AApk02bT;?hE2R?w!BVKy7-?T_u=Kk!387VGbKGrlJ1H3?^H zVSeqCf7HHwF)S9nM$=p0P)0ky=G9uD6-lRqYYWjx(m${xx@{ujdy!o`BdJ8VvJyFT zAY5JToI2;FVv)XF`_WTjz8K)siMTv5RG~%NXe_}XHCH=ns=+52! zKl)Rtsp;6d<~TYN1LiO>4Se?M4X4a+63SPIum-dfQs*TX{D4Tx^#2?D}<6{8{)V9&~Lr-~r zB&^o_Y)Ww(D~UxtY@yw1&CaHF@6|nro1R`vaJJUh)<602_S}_leLb98WThnQ3D(xb zdedt*J8SE)9ou|R93AqS?a1gzBoT|>b9Z!TFg7+Gwwux6F+U!|eOXf@xgI|r^?Coo|2I3#S&p65t$r~=2Ctlnmlv_PiqsI3x$BbtyXkk z5Jc%g_$BJb-+piOj>C9){GInkQfYs3)ZacDw%T5$9+oR!rN-JE7V_207xG{D3v%f$ zH#aN2X1ufbz}IV!KFG@F70Y3<(wUj}YV~k+BN~f$%H>Er7Kx{VR05Zc9@*bHdnq_K z8{NArIyuHAKb;MV8}0cyuU2VYz0z6Fd*xzeaJVynr9C^>o?q0ybR{2Fs$qU3+^Be^ zs@G_EZBHRL3~*LIn+}>yFA`1e*wtm|rli*foVAM=iVxh!lIg9ihJ|8hZZTXddG%(v zz8aL9+C;WmzU~J2?Q3(|ECxYvcELZmt5YfaopyU=rMvek@-9 z>%VS3bv`mZ9i5&G7MIC}f~!k@Pr9?b=v5m&p%r&*wf&x~A9TEUG+bXx?ARUc?d!62 z^U-SnPTZpK*Pm~%EQa$7L8;O{f5k5~y=uKvSd83$JhFEx(g|Bjvtc$99~%o}@%FQ4 z{abHI{{8o~zxJ)LTy9>u7SwC4s|(R|CajkIMvYyjKRnoY^kn0i3-RMeTc^&2kx2WS zk9JBGKWK;b7F!gup-435MPqDawaO-V|fB4Dx@Mv^uth2Tj9Ub&z(e}kTf26N-VJab&B z!!y)JK1J;H;&F0af7`G>Jm61H#>OUwe)L1JJ$t*%-DGsLr$U{2y>jMsSg!_aYr*

c!b>HB{%mxk5?s90c<8a_!jiXE@OO;sPH#Ns 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 TVf8`<00000NkvXXu0mjf3ecLu literal 0 HcmV?d00001