From 5b2e5b41c8c4c4f08d6c175d8dd9fcefa47475c5 Mon Sep 17 00:00:00 2001 From: "guilhem.duche" Date: Mon, 14 Jul 2008 12:51:59 +0000 Subject: [PATCH] fixing for classic controller git-svn-id: http://wiiusej.googlecode.com/svn/trunk@189 ae48ae66-6a45-0410-b38e-211266189506 --- WiiUseJ/WiiUseJ.dll | Bin 30985 -> 30985 bytes WiiUseJ/src/img/classiccontroller.png | Bin 0 -> 52666 bytes .../test/ClassicControllerGuiTest.java | 18 +- WiiUseJ/src/wiiusej/test/WiiuseJGuiTest.java | 1203 ++++++++--------- .../ClassicControllerButtonsEventPanel.java | 14 +- 5 files changed, 604 insertions(+), 631 deletions(-) create mode 100644 WiiUseJ/src/img/classiccontroller.png diff --git a/WiiUseJ/WiiUseJ.dll b/WiiUseJ/WiiUseJ.dll index e73c810cca8765355d5f3e1d153b32f9260b3f90..384c8290680077de91f24e16656cb60cbddeb842 100644 GIT binary patch delta 45 zcmeDD#Mt?XaY6_4ar5el-M&nBnm69c72)8y8>6Cd(}82Nzvxyzklbc=6{b)C!6Ff$ delta 45 zcmeDD#Mt?XaY6_4>ioos-M&mE?>FAc72)8x8>6Cd(}8ERzvxyzklbc=6{b)C!Cn!l diff --git a/WiiUseJ/src/img/classiccontroller.png b/WiiUseJ/src/img/classiccontroller.png new file mode 100644 index 0000000000000000000000000000000000000000..87a80f452dfedd34722d519437ce32bc2019ac06 GIT binary patch literal 52666 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 P00000NkvXXu0mjf 0) { -// gui = new ClassicControllerGuiTest(wiimotes[0]); -// } -// gui.setDefaultCloseOperation(WiiuseJGuiTest.EXIT_ON_CLOSE); -// gui.setVisible(true); -// } + public static void main(String[] args) { + Wiimote[] wiimotes = WiiUseApiManager.getWiimotes(1, true); + ClassicControllerGuiTest gui = null; + if (wiimotes.length > 0) { + gui = new ClassicControllerGuiTest(wiimotes[0]); + } + gui.setDefaultCloseOperation(WiiuseJGuiTest.EXIT_ON_CLOSE); + gui.setVisible(true); + } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel classicControllerPanel; private javax.swing.JProgressBar leftShoulderBar; diff --git a/WiiUseJ/src/wiiusej/test/WiiuseJGuiTest.java b/WiiUseJ/src/wiiusej/test/WiiuseJGuiTest.java index 7f9650d..54dc777 100644 --- a/WiiUseJ/src/wiiusej/test/WiiuseJGuiTest.java +++ b/WiiUseJ/src/wiiusej/test/WiiuseJGuiTest.java @@ -86,14 +86,24 @@ public class WiiuseJGuiTest extends javax.swing.JFrame implements public void windowActivated(WindowEvent e) { showExpansionWiimoteButton.setEnabled(false); - showExpansionWiimoteButton.setText("Hide Nunchuk"); - //@TODO adapt to the connected Expansion + if (expansionFrame instanceof NunchukGuiTest){ + showExpansionWiimoteButton.setText("Hide Nunchuk"); + }else if(expansionFrame instanceof GuitarHero3GuiTest){ + showExpansionWiimoteButton.setText("Hide Guitar"); + }else if(expansionFrame instanceof ClassicControllerGuiTest){ + showExpansionWiimoteButton.setText("Hide Classic Controller"); + } } public void windowDeactivated(WindowEvent e) { - showExpansionWiimoteButton.setEnabled(true); - showExpansionWiimoteButton.setText("Show Nunchuk"); - //@TODO adapt to the connected Expansion + showExpansionWiimoteButton.setEnabled(true); + if (expansionFrame instanceof NunchukGuiTest){ + showExpansionWiimoteButton.setText("Show Nunchuk"); + }else if(expansionFrame instanceof GuitarHero3GuiTest){ + showExpansionWiimoteButton.setText("Show Guitar"); + }else if(expansionFrame instanceof ClassicControllerGuiTest){ + showExpansionWiimoteButton.setText("Show Classic controller"); + } } }; @@ -375,546 +385,492 @@ public class WiiuseJGuiTest extends javax.swing.JFrame implements * regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents - private void initComponents() { - - leftPanel = new javax.swing.JPanel(); - irViewPanel = new IRPanel(); - jTabbedPane1 = new javax.swing.JTabbedPane(); - accelerationPanel = new AccelerationWiimoteEventPanel(); - motionSensingPanel = new OrientationWiimoteEventPanel(); - gForcePanel = new wiiusej.utils.GForceWiimoteEventPanel(); - rightPanel = new javax.swing.JPanel(); - fixedWiimotePanel = new javax.swing.JPanel(); - buttonsPanel = new ButtonsEventPanel(); - controlsPanel = new javax.swing.JPanel(); - activateRumbleIRPanel = new javax.swing.JPanel(); - toggleRumbleButton = new javax.swing.JButton(); - toggleIRTrackingButton = new javax.swing.JButton(); - activateMotionSensingPanel = new javax.swing.JPanel(); - toggleMotionSensingTrackingButton = new javax.swing.JButton(); - activateSmoothingContinuousPanel = new javax.swing.JPanel(); - toggleSmoothingButton = new javax.swing.JButton(); - toggleContinuousButton = new javax.swing.JButton(); - setLedsPanel = new javax.swing.JPanel(); - led1Button = new javax.swing.JButton(); - led2Button = new javax.swing.JButton(); - led3Button = new javax.swing.JButton(); - led4Button = new javax.swing.JButton(); - setLedsButton = new javax.swing.JButton(); - setAlphaSmoothingPanel = new javax.swing.JPanel(); - alphaSmoothingTextField = new javax.swing.JTextField(); - alphaSmoothingButton = new javax.swing.JButton(); - setOrientationThresholdPanel = new javax.swing.JPanel(); - orientationThresholdTextField = new javax.swing.JTextField(); - orientationThresholdButton = new javax.swing.JButton(); - setAccelerationThresholdPanel = new javax.swing.JPanel(); - accelerationThresholdTextField = new javax.swing.JTextField(); - accelerationThresholdButton = new javax.swing.JButton(); - getStatusPanel = new javax.swing.JPanel(); - getStatusButton = new javax.swing.JButton(); - batteryText = new javax.swing.JLabel(); - batteryLevelText = new javax.swing.JLabel(); - setIrSensitivyPanel = new javax.swing.JPanel(); - setIrSensitivySpinner = new javax.swing.JSpinner(); - setIrSensitivyButton = new javax.swing.JButton(); - setTimeoutButton = new javax.swing.JButton(); - setTimeoutPanel = new javax.swing.JPanel(); - normalTimeoutSpinner = new javax.swing.JSpinner(); - normalTimeoutText = new javax.swing.JLabel(); - expansionHandshakeTimeoutSpinner = new javax.swing.JSpinner(); - expansionHandshakeTimeoutText = new javax.swing.JLabel(); - setIRConfPanel = new javax.swing.JPanel(); - toggleSensorBarPositionButton = new javax.swing.JButton(); - toggleScreenAspectRatioButton = new javax.swing.JButton(); - setVirtualResolutionPanel = new javax.swing.JPanel(); - xLabel = new javax.swing.JLabel(); - xResolutionTextField = new javax.swing.JTextField(); - yLabel = new javax.swing.JLabel(); - yResolutionTextField = new javax.swing.JTextField(); - setVirtualResolutionButton = new javax.swing.JButton(); - startMouseControlPanel = new javax.swing.JPanel(); - mouseIRControlButton = new javax.swing.JButton(); - exPansionPanel = new javax.swing.JPanel(); - expansionText = new javax.swing.JLabel(); - showExpansionWiimoteButton = new javax.swing.JButton(); - showExpansionWiimoteButton.setEnabled(false); - messagesPanel = new javax.swing.JPanel(); - reconnectWiimotesButton = new javax.swing.JButton(); - messageLabelText = new javax.swing.JLabel(); - messageText = new javax.swing.JLabel(); - - setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - setTitle("WiiuseJ Test GUI"); - setName("WiiuseJ Test GUI"); // NOI18N - - leftPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - - irViewPanel.setBackground(new java.awt.Color(0, 0, 0)); - irViewPanel.setBorder(javax.swing.BorderFactory.createTitledBorder( - new javax.swing.border.LineBorder(new java.awt.Color(0, 153, - 153), 2, true), "IR View", - javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, - javax.swing.border.TitledBorder.DEFAULT_POSITION, - new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(255, 0, - 51))); - irViewPanel.setToolTipText("IREvent"); - - javax.swing.GroupLayout irViewPanelLayout = new javax.swing.GroupLayout( - irViewPanel); - irViewPanel.setLayout(irViewPanelLayout); - irViewPanelLayout.setHorizontalGroup(irViewPanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 272, Short.MAX_VALUE)); - irViewPanelLayout.setVerticalGroup(irViewPanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 299, Short.MAX_VALUE)); - - accelerationPanel.setToolTipText("MotionSensingEvent"); - - javax.swing.GroupLayout accelerationPanelLayout = new javax.swing.GroupLayout( - accelerationPanel); - accelerationPanel.setLayout(accelerationPanelLayout); - accelerationPanelLayout.setHorizontalGroup(accelerationPanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 279, Short.MAX_VALUE)); - accelerationPanelLayout.setVerticalGroup(accelerationPanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 213, Short.MAX_VALUE)); - - jTabbedPane1.addTab("Acceleration", accelerationPanel); - - javax.swing.GroupLayout motionSensingPanelLayout = new javax.swing.GroupLayout( - motionSensingPanel); - motionSensingPanel.setLayout(motionSensingPanelLayout); - motionSensingPanelLayout.setHorizontalGroup(motionSensingPanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 279, Short.MAX_VALUE)); - motionSensingPanelLayout.setVerticalGroup(motionSensingPanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 213, Short.MAX_VALUE)); - - jTabbedPane1.addTab("Orientation", motionSensingPanel); - - javax.swing.GroupLayout gForcePanelLayout = new javax.swing.GroupLayout( - gForcePanel); - gForcePanel.setLayout(gForcePanelLayout); - gForcePanelLayout.setHorizontalGroup(gForcePanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 279, Short.MAX_VALUE)); - gForcePanelLayout.setVerticalGroup(gForcePanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 213, Short.MAX_VALUE)); - - jTabbedPane1.addTab("GForce", gForcePanel); - - javax.swing.GroupLayout leftPanelLayout = new javax.swing.GroupLayout( - leftPanel); - leftPanel.setLayout(leftPanelLayout); - leftPanelLayout.setHorizontalGroup(leftPanelLayout.createParallelGroup( - javax.swing.GroupLayout.Alignment.LEADING).addComponent( - irViewPanel, javax.swing.GroupLayout.Alignment.TRAILING, - javax.swing.GroupLayout.DEFAULT_SIZE, - javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jTabbedPane1, - javax.swing.GroupLayout.DEFAULT_SIZE, 284, - Short.MAX_VALUE)); - leftPanelLayout - .setVerticalGroup(leftPanelLayout - .createParallelGroup( - javax.swing.GroupLayout.Alignment.LEADING) - .addGroup( - javax.swing.GroupLayout.Alignment.TRAILING, - leftPanelLayout - .createSequentialGroup() - .addComponent( - jTabbedPane1, - javax.swing.GroupLayout.PREFERRED_SIZE, - 238, - javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap( - javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent( - irViewPanel, - javax.swing.GroupLayout.DEFAULT_SIZE, - javax.swing.GroupLayout.DEFAULT_SIZE, - Short.MAX_VALUE))); - - jTabbedPane1.getAccessibleContext().setAccessibleName("Orientation"); - - rightPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - rightPanel.setLayout(new javax.swing.BoxLayout(rightPanel, - javax.swing.BoxLayout.LINE_AXIS)); - - fixedWiimotePanel.setMaximumSize(new java.awt.Dimension(120, 32767)); - fixedWiimotePanel.setMinimumSize(new java.awt.Dimension(120, 100)); - fixedWiimotePanel.setPreferredSize(new java.awt.Dimension(120, 100)); - fixedWiimotePanel.setRequestFocusEnabled(false); - fixedWiimotePanel.setLayout(null); - - buttonsPanel.setMaximumSize(new java.awt.Dimension(120, 484)); - buttonsPanel.setMinimumSize(new java.awt.Dimension(120, 484)); - buttonsPanel.setOpaque(false); - buttonsPanel.setPreferredSize(new java.awt.Dimension(120, 484)); - - javax.swing.GroupLayout buttonsPanelLayout = new javax.swing.GroupLayout( - buttonsPanel); - buttonsPanel.setLayout(buttonsPanelLayout); - buttonsPanelLayout.setHorizontalGroup(buttonsPanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 120, Short.MAX_VALUE)); - buttonsPanelLayout.setVerticalGroup(buttonsPanelLayout - .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 484, Short.MAX_VALUE)); - - fixedWiimotePanel.add(buttonsPanel); - buttonsPanel.setBounds(0, 0, 120, 484); - - rightPanel.add(fixedWiimotePanel); - - controlsPanel.setMinimumSize(new java.awt.Dimension(100, 264)); - controlsPanel.setPreferredSize(new java.awt.Dimension(190, 264)); - controlsPanel.setLayout(new java.awt.GridLayout(16, 1)); - - toggleRumbleButton.setText("Activate Rumble"); - toggleRumbleButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - toggleRumbleButtonMousePressed(evt); - } - }); - activateRumbleIRPanel.add(toggleRumbleButton); - - toggleIRTrackingButton.setText("Activate IR Tracking"); - toggleIRTrackingButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - toggleIRTrackingButtonMousePressed(evt); - } - }); - activateRumbleIRPanel.add(toggleIRTrackingButton); - - controlsPanel.add(activateRumbleIRPanel); - - toggleMotionSensingTrackingButton - .setText("Activate motion sensing Tracking"); - toggleMotionSensingTrackingButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - toggleMotionSensingTrackingButtonMousePressed(evt); - } - }); - activateMotionSensingPanel.add(toggleMotionSensingTrackingButton); - - controlsPanel.add(activateMotionSensingPanel); - - toggleSmoothingButton.setText("Activate Smoothing"); - toggleSmoothingButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - toggleSmoothingButtonMousePressed(evt); - } - }); - activateSmoothingContinuousPanel.add(toggleSmoothingButton); - - toggleContinuousButton.setText("Activate Continuous"); - toggleContinuousButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - toggleContinuousButtonMousePressed(evt); - } - }); - activateSmoothingContinuousPanel.add(toggleContinuousButton); - - controlsPanel.add(activateSmoothingContinuousPanel); - - led1Button.setText("Led1"); - led1Button.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - led1ButtonMousePressed(evt); - } - }); - setLedsPanel.add(led1Button); - - led2Button.setText("Led2"); - led2Button.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - led2ButtonMousePressed(evt); - } - }); - setLedsPanel.add(led2Button); - - led3Button.setText("Led3"); - led3Button.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - led3ButtonMousePressed(evt); - } - }); - setLedsPanel.add(led3Button); - - led4Button.setText("Led4"); - led4Button.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - led4ButtonMousePressed(evt); - } - }); - setLedsPanel.add(led4Button); - - setLedsButton.setText("Set leds"); - setLedsButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - setLedsButtonMousePressed(evt); - } - }); - setLedsPanel.add(setLedsButton); - - controlsPanel.add(setLedsPanel); - - alphaSmoothingTextField.setMinimumSize(new java.awt.Dimension(100, 20)); - alphaSmoothingTextField - .setPreferredSize(new java.awt.Dimension(100, 20)); - setAlphaSmoothingPanel.add(alphaSmoothingTextField); - - alphaSmoothingButton.setText("Set alpha smoothing"); - alphaSmoothingButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - alphaSmoothingButtonMousePressed(evt); - } - }); - setAlphaSmoothingPanel.add(alphaSmoothingButton); - - controlsPanel.add(setAlphaSmoothingPanel); - - orientationThresholdTextField.setMinimumSize(new java.awt.Dimension( - 100, 20)); - orientationThresholdTextField.setPreferredSize(new java.awt.Dimension( - 100, 20)); - setOrientationThresholdPanel.add(orientationThresholdTextField); - - orientationThresholdButton.setText("Set orientation threshold"); - orientationThresholdButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - orientationThresholdButtonMousePressed(evt); - } - }); - setOrientationThresholdPanel.add(orientationThresholdButton); - - controlsPanel.add(setOrientationThresholdPanel); - - accelerationThresholdTextField.setPreferredSize(new java.awt.Dimension( - 100, 20)); - setAccelerationThresholdPanel.add(accelerationThresholdTextField); - - accelerationThresholdButton.setText("Set acceleration threshold"); - accelerationThresholdButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - accelerationThresholdButtonMousePressed(evt); - } - }); - setAccelerationThresholdPanel.add(accelerationThresholdButton); - - controlsPanel.add(setAccelerationThresholdPanel); - - getStatusButton.setText("Get status"); - getStatusButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - getStatusButtonMousePressed(evt); - } - }); - getStatusPanel.add(getStatusButton); - - batteryText.setFont(new java.awt.Font("Tahoma", 0, 14)); - batteryText.setText("Battery level :"); - getStatusPanel.add(batteryText); - - batteryLevelText.setFont(new java.awt.Font("Arial", 0, 14)); - batteryLevelText.setText(" %"); - getStatusPanel.add(batteryLevelText); - - controlsPanel.add(getStatusPanel); - - setIrSensitivySpinner.setPreferredSize(new java.awt.Dimension(50, 18)); - setIrSensitivySpinner - .addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - setIrSensitivySpinnerStateChanged(evt); - } - }); - setIrSensitivyPanel.add(setIrSensitivySpinner); - - setIrSensitivyButton.setText("SetIrSensivity"); - setIrSensitivyButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - setIrSensitivyButtonMousePressed(evt); - } - }); - setIrSensitivyPanel.add(setIrSensitivyButton); - - setTimeoutButton.setText("Set timeouts in ms"); - setTimeoutButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - setTimeoutButtonMousePressed(evt); - } - }); - setIrSensitivyPanel.add(setTimeoutButton); - - controlsPanel.add(setIrSensitivyPanel); - - normalTimeoutSpinner.setPreferredSize(new java.awt.Dimension(40, 18)); - normalTimeoutSpinner - .addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - normalTimeoutSpinnerStateChanged(evt); - } - }); - setTimeoutPanel.add(normalTimeoutSpinner); - - normalTimeoutText.setText("Normal timeout"); - setTimeoutPanel.add(normalTimeoutText); - - expansionHandshakeTimeoutSpinner - .setPreferredSize(new java.awt.Dimension(40, 18)); - expansionHandshakeTimeoutSpinner - .addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - expansionHandshakeTimeoutSpinnerStateChanged(evt); - } - }); - setTimeoutPanel.add(expansionHandshakeTimeoutSpinner); - - expansionHandshakeTimeoutText.setText("Expansion handshake timeout"); - setTimeoutPanel.add(expansionHandshakeTimeoutText); - - controlsPanel.add(setTimeoutPanel); - - toggleSensorBarPositionButton.setText("Set sensor bar above"); - toggleSensorBarPositionButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - toggleSensorBarPositionButtonMousePressed(evt); - } - }); - setIRConfPanel.add(toggleSensorBarPositionButton); - - toggleScreenAspectRatioButton.setText("Set screen aspect ratio 4/3"); - toggleScreenAspectRatioButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - toggleScreenAspectRatioButtonMousePressed(evt); - } - }); - setIRConfPanel.add(toggleScreenAspectRatioButton); - - controlsPanel.add(setIRConfPanel); - - xLabel.setText("X"); - setVirtualResolutionPanel.add(xLabel); - - xResolutionTextField.setMinimumSize(new java.awt.Dimension(40, 20)); - xResolutionTextField.setPreferredSize(new java.awt.Dimension(40, 20)); - setVirtualResolutionPanel.add(xResolutionTextField); - - yLabel.setText("Y"); - setVirtualResolutionPanel.add(yLabel); - - yResolutionTextField.setFocusTraversalPolicyProvider(true); - yResolutionTextField.setMinimumSize(new java.awt.Dimension(40, 20)); - yResolutionTextField.setPreferredSize(new java.awt.Dimension(40, 20)); - setVirtualResolutionPanel.add(yResolutionTextField); - - setVirtualResolutionButton.setText("Set virtual resolution"); - setVirtualResolutionButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - setVirtualResolutionButtonMousePressed(evt); - } - }); - setVirtualResolutionPanel.add(setVirtualResolutionButton); - - controlsPanel.add(setVirtualResolutionPanel); - - mouseIRControlButton.setText("Start infrared mouse control"); - mouseIRControlButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - mouseIRControlButtonMousePressed(evt); - } - }); - startMouseControlPanel.add(mouseIRControlButton); - - controlsPanel.add(startMouseControlPanel); - - expansionText.setText("No expansion connected."); - exPansionPanel.add(expansionText); - - showExpansionWiimoteButton.setText("No expansion connected"); - showExpansionWiimoteButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - showExpansionWiimoteButtonMousePressed(evt); - } - }); - exPansionPanel.add(showExpansionWiimoteButton); - - controlsPanel.add(exPansionPanel); - - reconnectWiimotesButton.setText("Reconnect wiimote"); - reconnectWiimotesButton - .addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - reconnectWiimotesButtonMousePressed(evt); - } - }); - messagesPanel.add(reconnectWiimotesButton); - - messageLabelText.setFont(new java.awt.Font("Tahoma", 0, 14)); - messageLabelText.setText("Message : "); - messagesPanel.add(messageLabelText); - - messageText.setFont(new java.awt.Font("Arial", 0, 14)); - messageText.setText("None"); - messagesPanel.add(messageText); - - controlsPanel.add(messagesPanel); - - rightPanel.add(controlsPanel); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout( - getContentPane()); - getContentPane().setLayout(layout); - layout - .setHorizontalGroup(layout - .createParallelGroup( - javax.swing.GroupLayout.Alignment.LEADING) - .addGroup( - layout - .createSequentialGroup() - .addComponent( - leftPanel, - javax.swing.GroupLayout.DEFAULT_SIZE, - javax.swing.GroupLayout.DEFAULT_SIZE, - Short.MAX_VALUE) - .addPreferredGap( - javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent( - rightPanel, - javax.swing.GroupLayout.DEFAULT_SIZE, - 498, Short.MAX_VALUE))); - layout.setVerticalGroup(layout.createParallelGroup( - javax.swing.GroupLayout.Alignment.LEADING).addComponent( - leftPanel, javax.swing.GroupLayout.DEFAULT_SIZE, - javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(rightPanel, javax.swing.GroupLayout.DEFAULT_SIZE, - 573, Short.MAX_VALUE)); - - java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit() - .getScreenSize(); - setBounds((screenSize.width - 800) / 2, (screenSize.height - 600) / 2, - 800, 600); - }// //GEN-END:initComponents + // //GEN-BEGIN:initComponents + private void initComponents() { + + leftPanel = new javax.swing.JPanel(); + irViewPanel = new IRPanel(); + jTabbedPane1 = new javax.swing.JTabbedPane(); + accelerationPanel = new AccelerationWiimoteEventPanel(); + motionSensingPanel = new OrientationWiimoteEventPanel(); + gForcePanel = new wiiusej.utils.GForceWiimoteEventPanel(); + rightPanel = new javax.swing.JPanel(); + fixedWiimotePanel = new javax.swing.JPanel(); + buttonsPanel = new ButtonsEventPanel(); + controlsPanel = new javax.swing.JPanel(); + activateRumbleIRPanel = new javax.swing.JPanel(); + toggleRumbleButton = new javax.swing.JButton(); + toggleIRTrackingButton = new javax.swing.JButton(); + activateMotionSensingPanel = new javax.swing.JPanel(); + toggleMotionSensingTrackingButton = new javax.swing.JButton(); + activateSmoothingContinuousPanel = new javax.swing.JPanel(); + toggleSmoothingButton = new javax.swing.JButton(); + toggleContinuousButton = new javax.swing.JButton(); + setLedsPanel = new javax.swing.JPanel(); + led1Button = new javax.swing.JButton(); + led2Button = new javax.swing.JButton(); + led3Button = new javax.swing.JButton(); + led4Button = new javax.swing.JButton(); + setLedsButton = new javax.swing.JButton(); + setAlphaSmoothingPanel = new javax.swing.JPanel(); + alphaSmoothingTextField = new javax.swing.JTextField(); + alphaSmoothingButton = new javax.swing.JButton(); + setOrientationThresholdPanel = new javax.swing.JPanel(); + orientationThresholdTextField = new javax.swing.JTextField(); + orientationThresholdButton = new javax.swing.JButton(); + setAccelerationThresholdPanel = new javax.swing.JPanel(); + accelerationThresholdTextField = new javax.swing.JTextField(); + accelerationThresholdButton = new javax.swing.JButton(); + getStatusPanel = new javax.swing.JPanel(); + getStatusButton = new javax.swing.JButton(); + batteryText = new javax.swing.JLabel(); + batteryLevelText = new javax.swing.JLabel(); + setIrSensitivyPanel = new javax.swing.JPanel(); + setIrSensitivySpinner = new javax.swing.JSpinner(); + setIrSensitivyButton = new javax.swing.JButton(); + setTimeoutButton = new javax.swing.JButton(); + setTimeoutPanel = new javax.swing.JPanel(); + normalTimeoutSpinner = new javax.swing.JSpinner(); + normalTimeoutText = new javax.swing.JLabel(); + expansionHandshakeTimeoutSpinner = new javax.swing.JSpinner(); + expansionHandshakeTimeoutText = new javax.swing.JLabel(); + setIRConfPanel = new javax.swing.JPanel(); + toggleSensorBarPositionButton = new javax.swing.JButton(); + toggleScreenAspectRatioButton = new javax.swing.JButton(); + setVirtualResolutionPanel = new javax.swing.JPanel(); + xLabel = new javax.swing.JLabel(); + xResolutionTextField = new javax.swing.JTextField(); + yLabel = new javax.swing.JLabel(); + yResolutionTextField = new javax.swing.JTextField(); + setVirtualResolutionButton = new javax.swing.JButton(); + startMouseControlPanel = new javax.swing.JPanel(); + mouseIRControlButton = new javax.swing.JButton(); + exPansionPanel = new javax.swing.JPanel(); + expansionText = new javax.swing.JLabel(); + expansionButtonPanel = new javax.swing.JPanel(); + showExpansionWiimoteButton = new javax.swing.JButton(); + showExpansionWiimoteButton.setEnabled(false); + messagesPanel = new javax.swing.JPanel(); + reconnectWiimotesButton = new javax.swing.JButton(); + messageLabelText = new javax.swing.JLabel(); + messageText = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("WiiuseJ Test GUI"); + setName("WiiuseJ Test GUI"); // NOI18N + + leftPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + + irViewPanel.setBackground(new java.awt.Color(0, 0, 0)); + irViewPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 153, 153), 2, true), "IR View", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(255, 0, 51))); + irViewPanel.setToolTipText("IREvent"); + + javax.swing.GroupLayout irViewPanelLayout = new javax.swing.GroupLayout(irViewPanel); + irViewPanel.setLayout(irViewPanelLayout); + irViewPanelLayout.setHorizontalGroup( + irViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 272, Short.MAX_VALUE) + ); + irViewPanelLayout.setVerticalGroup( + irViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 299, Short.MAX_VALUE) + ); + + accelerationPanel.setToolTipText("MotionSensingEvent"); + + javax.swing.GroupLayout accelerationPanelLayout = new javax.swing.GroupLayout(accelerationPanel); + accelerationPanel.setLayout(accelerationPanelLayout); + accelerationPanelLayout.setHorizontalGroup( + accelerationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 279, Short.MAX_VALUE) + ); + accelerationPanelLayout.setVerticalGroup( + accelerationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 213, Short.MAX_VALUE) + ); + + jTabbedPane1.addTab("Acceleration", accelerationPanel); + + javax.swing.GroupLayout motionSensingPanelLayout = new javax.swing.GroupLayout(motionSensingPanel); + motionSensingPanel.setLayout(motionSensingPanelLayout); + motionSensingPanelLayout.setHorizontalGroup( + motionSensingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 279, Short.MAX_VALUE) + ); + motionSensingPanelLayout.setVerticalGroup( + motionSensingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 213, Short.MAX_VALUE) + ); + + jTabbedPane1.addTab("Orientation", motionSensingPanel); + + javax.swing.GroupLayout gForcePanelLayout = new javax.swing.GroupLayout(gForcePanel); + gForcePanel.setLayout(gForcePanelLayout); + gForcePanelLayout.setHorizontalGroup( + gForcePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 279, Short.MAX_VALUE) + ); + gForcePanelLayout.setVerticalGroup( + gForcePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 213, Short.MAX_VALUE) + ); + + jTabbedPane1.addTab("GForce", gForcePanel); + + javax.swing.GroupLayout leftPanelLayout = new javax.swing.GroupLayout(leftPanel); + leftPanel.setLayout(leftPanelLayout); + leftPanelLayout.setHorizontalGroup( + leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(irViewPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 284, Short.MAX_VALUE) + ); + leftPanelLayout.setVerticalGroup( + leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, leftPanelLayout.createSequentialGroup() + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(irViewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jTabbedPane1.getAccessibleContext().setAccessibleName("Orientation"); + + rightPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + rightPanel.setLayout(new javax.swing.BoxLayout(rightPanel, javax.swing.BoxLayout.LINE_AXIS)); + + fixedWiimotePanel.setMaximumSize(new java.awt.Dimension(120, 32767)); + fixedWiimotePanel.setMinimumSize(new java.awt.Dimension(120, 100)); + fixedWiimotePanel.setPreferredSize(new java.awt.Dimension(120, 100)); + fixedWiimotePanel.setRequestFocusEnabled(false); + fixedWiimotePanel.setLayout(null); + + buttonsPanel.setMaximumSize(new java.awt.Dimension(120, 484)); + buttonsPanel.setMinimumSize(new java.awt.Dimension(120, 484)); + buttonsPanel.setOpaque(false); + buttonsPanel.setPreferredSize(new java.awt.Dimension(120, 484)); + + javax.swing.GroupLayout buttonsPanelLayout = new javax.swing.GroupLayout(buttonsPanel); + buttonsPanel.setLayout(buttonsPanelLayout); + buttonsPanelLayout.setHorizontalGroup( + buttonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 120, Short.MAX_VALUE) + ); + buttonsPanelLayout.setVerticalGroup( + buttonsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 484, Short.MAX_VALUE) + ); + + fixedWiimotePanel.add(buttonsPanel); + buttonsPanel.setBounds(0, 0, 120, 484); + + rightPanel.add(fixedWiimotePanel); + + controlsPanel.setMinimumSize(new java.awt.Dimension(100, 264)); + controlsPanel.setPreferredSize(new java.awt.Dimension(190, 264)); + controlsPanel.setLayout(new java.awt.GridLayout(16, 1)); + + toggleRumbleButton.setText("Activate Rumble"); + toggleRumbleButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + toggleRumbleButtonMousePressed(evt); + } + }); + activateRumbleIRPanel.add(toggleRumbleButton); + + toggleIRTrackingButton.setText("Activate IR Tracking"); + toggleIRTrackingButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + toggleIRTrackingButtonMousePressed(evt); + } + }); + activateRumbleIRPanel.add(toggleIRTrackingButton); + + controlsPanel.add(activateRumbleIRPanel); + + toggleMotionSensingTrackingButton.setText("Activate motion sensing Tracking"); + toggleMotionSensingTrackingButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + toggleMotionSensingTrackingButtonMousePressed(evt); + } + }); + activateMotionSensingPanel.add(toggleMotionSensingTrackingButton); + + controlsPanel.add(activateMotionSensingPanel); + + toggleSmoothingButton.setText("Activate Smoothing"); + toggleSmoothingButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + toggleSmoothingButtonMousePressed(evt); + } + }); + activateSmoothingContinuousPanel.add(toggleSmoothingButton); + + toggleContinuousButton.setText("Activate Continuous"); + toggleContinuousButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + toggleContinuousButtonMousePressed(evt); + } + }); + activateSmoothingContinuousPanel.add(toggleContinuousButton); + + controlsPanel.add(activateSmoothingContinuousPanel); + + led1Button.setText("Led1"); + led1Button.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + led1ButtonMousePressed(evt); + } + }); + setLedsPanel.add(led1Button); + + led2Button.setText("Led2"); + led2Button.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + led2ButtonMousePressed(evt); + } + }); + setLedsPanel.add(led2Button); + + led3Button.setText("Led3"); + led3Button.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + led3ButtonMousePressed(evt); + } + }); + setLedsPanel.add(led3Button); + + led4Button.setText("Led4"); + led4Button.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + led4ButtonMousePressed(evt); + } + }); + setLedsPanel.add(led4Button); + + setLedsButton.setText("Set leds"); + setLedsButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + setLedsButtonMousePressed(evt); + } + }); + setLedsPanel.add(setLedsButton); + + controlsPanel.add(setLedsPanel); + + alphaSmoothingTextField.setMinimumSize(new java.awt.Dimension(100, 20)); + alphaSmoothingTextField.setPreferredSize(new java.awt.Dimension(100, 20)); + setAlphaSmoothingPanel.add(alphaSmoothingTextField); + + alphaSmoothingButton.setText("Set alpha smoothing"); + alphaSmoothingButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + alphaSmoothingButtonMousePressed(evt); + } + }); + setAlphaSmoothingPanel.add(alphaSmoothingButton); + + controlsPanel.add(setAlphaSmoothingPanel); + + orientationThresholdTextField.setMinimumSize(new java.awt.Dimension(100, 20)); + orientationThresholdTextField.setPreferredSize(new java.awt.Dimension(100, 20)); + setOrientationThresholdPanel.add(orientationThresholdTextField); + + orientationThresholdButton.setText("Set orientation threshold"); + orientationThresholdButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + orientationThresholdButtonMousePressed(evt); + } + }); + setOrientationThresholdPanel.add(orientationThresholdButton); + + controlsPanel.add(setOrientationThresholdPanel); + + accelerationThresholdTextField.setPreferredSize(new java.awt.Dimension(100, 20)); + setAccelerationThresholdPanel.add(accelerationThresholdTextField); + + accelerationThresholdButton.setText("Set acceleration threshold"); + accelerationThresholdButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + accelerationThresholdButtonMousePressed(evt); + } + }); + setAccelerationThresholdPanel.add(accelerationThresholdButton); + + controlsPanel.add(setAccelerationThresholdPanel); + + getStatusButton.setText("Get status"); + getStatusButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + getStatusButtonMousePressed(evt); + } + }); + getStatusPanel.add(getStatusButton); + + batteryText.setFont(new java.awt.Font("Tahoma", 0, 14)); + batteryText.setText("Battery level :"); + getStatusPanel.add(batteryText); + + batteryLevelText.setFont(new java.awt.Font("Arial", 0, 14)); + batteryLevelText.setText(" %"); + getStatusPanel.add(batteryLevelText); + + controlsPanel.add(getStatusPanel); + + setIrSensitivySpinner.setPreferredSize(new java.awt.Dimension(50, 18)); + setIrSensitivySpinner.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + setIrSensitivySpinnerStateChanged(evt); + } + }); + setIrSensitivyPanel.add(setIrSensitivySpinner); + + setIrSensitivyButton.setText("SetIrSensivity"); + setIrSensitivyButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + setIrSensitivyButtonMousePressed(evt); + } + }); + setIrSensitivyPanel.add(setIrSensitivyButton); + + setTimeoutButton.setText("Set timeouts in ms"); + setTimeoutButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + setTimeoutButtonMousePressed(evt); + } + }); + setIrSensitivyPanel.add(setTimeoutButton); + + controlsPanel.add(setIrSensitivyPanel); + + normalTimeoutSpinner.setPreferredSize(new java.awt.Dimension(40, 18)); + normalTimeoutSpinner.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + normalTimeoutSpinnerStateChanged(evt); + } + }); + setTimeoutPanel.add(normalTimeoutSpinner); + + normalTimeoutText.setText("Normal timeout"); + setTimeoutPanel.add(normalTimeoutText); + + expansionHandshakeTimeoutSpinner.setPreferredSize(new java.awt.Dimension(40, 18)); + expansionHandshakeTimeoutSpinner.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + expansionHandshakeTimeoutSpinnerStateChanged(evt); + } + }); + setTimeoutPanel.add(expansionHandshakeTimeoutSpinner); + + expansionHandshakeTimeoutText.setText("Expansion handshake timeout"); + setTimeoutPanel.add(expansionHandshakeTimeoutText); + + controlsPanel.add(setTimeoutPanel); + + toggleSensorBarPositionButton.setText("Set sensor bar above"); + toggleSensorBarPositionButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + toggleSensorBarPositionButtonMousePressed(evt); + } + }); + setIRConfPanel.add(toggleSensorBarPositionButton); + + toggleScreenAspectRatioButton.setText("Set screen aspect ratio 4/3"); + toggleScreenAspectRatioButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + toggleScreenAspectRatioButtonMousePressed(evt); + } + }); + setIRConfPanel.add(toggleScreenAspectRatioButton); + + controlsPanel.add(setIRConfPanel); + + xLabel.setText("X"); + setVirtualResolutionPanel.add(xLabel); + + xResolutionTextField.setMinimumSize(new java.awt.Dimension(40, 20)); + xResolutionTextField.setPreferredSize(new java.awt.Dimension(40, 20)); + setVirtualResolutionPanel.add(xResolutionTextField); + + yLabel.setText("Y"); + setVirtualResolutionPanel.add(yLabel); + + yResolutionTextField.setFocusTraversalPolicyProvider(true); + yResolutionTextField.setMinimumSize(new java.awt.Dimension(40, 20)); + yResolutionTextField.setPreferredSize(new java.awt.Dimension(40, 20)); + setVirtualResolutionPanel.add(yResolutionTextField); + + setVirtualResolutionButton.setText("Set virtual resolution"); + setVirtualResolutionButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + setVirtualResolutionButtonMousePressed(evt); + } + }); + setVirtualResolutionPanel.add(setVirtualResolutionButton); + + controlsPanel.add(setVirtualResolutionPanel); + + mouseIRControlButton.setText("Start infrared mouse control"); + mouseIRControlButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + mouseIRControlButtonMousePressed(evt); + } + }); + startMouseControlPanel.add(mouseIRControlButton); + + controlsPanel.add(startMouseControlPanel); + + expansionText.setText("No expansion connected."); + exPansionPanel.add(expansionText); + + controlsPanel.add(exPansionPanel); + + showExpansionWiimoteButton.setText("No expansion connected"); + showExpansionWiimoteButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + showExpansionWiimoteButtonMousePressed(evt); + } + }); + expansionButtonPanel.add(showExpansionWiimoteButton); + + controlsPanel.add(expansionButtonPanel); + + reconnectWiimotesButton.setText("Reconnect wiimote"); + reconnectWiimotesButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + reconnectWiimotesButtonMousePressed(evt); + } + }); + messagesPanel.add(reconnectWiimotesButton); + + messageLabelText.setFont(new java.awt.Font("Tahoma", 0, 14)); + messageLabelText.setText("Message : "); + messagesPanel.add(messageLabelText); + + messageText.setFont(new java.awt.Font("Arial", 0, 14)); + messageText.setText("None"); + messagesPanel.add(messageText); + + controlsPanel.add(messagesPanel); + + rightPanel.add(controlsPanel); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(leftPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rightPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 498, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(leftPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(rightPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 573, Short.MAX_VALUE) + ); + + java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); + setBounds((screenSize.width-800)/2, (screenSize.height-600)/2, 800, 600); + }// //GEN-END:initComponents private void toggleRumbleButtonMousePressed(java.awt.event.MouseEvent evt) {// GEN-FIRST:event_toggleRumbleButtonMousePressed if (toggleRumbleButton.isEnabled()) { @@ -1325,82 +1281,99 @@ public class WiiuseJGuiTest extends javax.swing.JFrame implements expansionFrame.setEnabled(true); expansionFrame.setVisible(true); showExpansionWiimoteButton.setEnabled(false); - showExpansionWiimoteButton.setText("Hide Nunchuk"); - messageText.setText("Nunchuk displayed !"); + if (expansionFrame instanceof NunchukGuiTest){ + showExpansionWiimoteButton.setText("Hide Nunchuk"); + messageText.setText("Nunchuk displayed !"); + }else if(expansionFrame instanceof GuitarHero3GuiTest){ + showExpansionWiimoteButton.setText("Hide Guitar"); + messageText.setText("Guitar displayed !"); + }else if(expansionFrame instanceof ClassicControllerGuiTest){ + showExpansionWiimoteButton.setText("Hide Classic controller"); + messageText.setText("Classic controller displayed !"); + } } else {// already being shown expansionFrame.setEnabled(false); expansionFrame.setVisible(false); showExpansionWiimoteButton.setEnabled(true); - showExpansionWiimoteButton.setText("Show Nunchuk"); - messageText.setText("Nunchuk hidden !"); + if (expansionFrame instanceof NunchukGuiTest){ + showExpansionWiimoteButton.setText("Show Nunchuk"); + messageText.setText("Nunchuk hidden !"); + }else if(expansionFrame instanceof GuitarHero3GuiTest){ + showExpansionWiimoteButton.setText("Show Guitar"); + messageText.setText("Guitar hidden !"); + }else if(expansionFrame instanceof ClassicControllerGuiTest){ + showExpansionWiimoteButton.setText("Show Classic controller"); + messageText.setText("Classic controller hidden !"); + } } } }// GEN-LAST:event_showExpansionWiimoteButtonMousePressed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel accelerationPanel; - private javax.swing.JButton accelerationThresholdButton; - private javax.swing.JTextField accelerationThresholdTextField; - private javax.swing.JPanel activateMotionSensingPanel; - private javax.swing.JPanel activateRumbleIRPanel; - private javax.swing.JPanel activateSmoothingContinuousPanel; - private javax.swing.JButton alphaSmoothingButton; - private javax.swing.JTextField alphaSmoothingTextField; - private javax.swing.JLabel batteryLevelText; - private javax.swing.JLabel batteryText; - private javax.swing.JPanel buttonsPanel; - private javax.swing.JPanel controlsPanel; - private javax.swing.JPanel exPansionPanel; - private javax.swing.JSpinner expansionHandshakeTimeoutSpinner; - private javax.swing.JLabel expansionHandshakeTimeoutText; - private javax.swing.JLabel expansionText; - private javax.swing.JPanel fixedWiimotePanel; - private javax.swing.JPanel gForcePanel; - private javax.swing.JButton getStatusButton; - private javax.swing.JPanel getStatusPanel; - private javax.swing.JPanel irViewPanel; - private javax.swing.JTabbedPane jTabbedPane1; - private javax.swing.JButton led1Button; - private javax.swing.JButton led2Button; - private javax.swing.JButton led3Button; - private javax.swing.JButton led4Button; - private javax.swing.JPanel leftPanel; - private javax.swing.JLabel messageLabelText; - private javax.swing.JLabel messageText; - private javax.swing.JPanel messagesPanel; - private javax.swing.JPanel motionSensingPanel; - private javax.swing.JButton mouseIRControlButton; - private javax.swing.JSpinner normalTimeoutSpinner; - private javax.swing.JLabel normalTimeoutText; - private javax.swing.JButton orientationThresholdButton; - private javax.swing.JTextField orientationThresholdTextField; - private javax.swing.JButton reconnectWiimotesButton; - private javax.swing.JPanel rightPanel; - private javax.swing.JPanel setAccelerationThresholdPanel; - private javax.swing.JPanel setAlphaSmoothingPanel; - private javax.swing.JPanel setIRConfPanel; - private javax.swing.JButton setIrSensitivyButton; - private javax.swing.JPanel setIrSensitivyPanel; - private javax.swing.JSpinner setIrSensitivySpinner; - private javax.swing.JButton setLedsButton; - private javax.swing.JPanel setLedsPanel; - private javax.swing.JPanel setOrientationThresholdPanel; - private javax.swing.JButton setTimeoutButton; - private javax.swing.JPanel setTimeoutPanel; - private javax.swing.JButton setVirtualResolutionButton; - private javax.swing.JPanel setVirtualResolutionPanel; - private javax.swing.JButton showExpansionWiimoteButton; - private javax.swing.JPanel startMouseControlPanel; - private javax.swing.JButton toggleContinuousButton; - private javax.swing.JButton toggleIRTrackingButton; - private javax.swing.JButton toggleMotionSensingTrackingButton; - private javax.swing.JButton toggleRumbleButton; - private javax.swing.JButton toggleScreenAspectRatioButton; - private javax.swing.JButton toggleSensorBarPositionButton; - private javax.swing.JButton toggleSmoothingButton; - private javax.swing.JLabel xLabel; - private javax.swing.JTextField xResolutionTextField; - private javax.swing.JLabel yLabel; - private javax.swing.JTextField yResolutionTextField; - // End of variables declaration//GEN-END:variables + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel accelerationPanel; + private javax.swing.JButton accelerationThresholdButton; + private javax.swing.JTextField accelerationThresholdTextField; + private javax.swing.JPanel activateMotionSensingPanel; + private javax.swing.JPanel activateRumbleIRPanel; + private javax.swing.JPanel activateSmoothingContinuousPanel; + private javax.swing.JButton alphaSmoothingButton; + private javax.swing.JTextField alphaSmoothingTextField; + private javax.swing.JLabel batteryLevelText; + private javax.swing.JLabel batteryText; + private javax.swing.JPanel buttonsPanel; + private javax.swing.JPanel controlsPanel; + private javax.swing.JPanel exPansionPanel; + private javax.swing.JPanel expansionButtonPanel; + private javax.swing.JSpinner expansionHandshakeTimeoutSpinner; + private javax.swing.JLabel expansionHandshakeTimeoutText; + private javax.swing.JLabel expansionText; + private javax.swing.JPanel fixedWiimotePanel; + private javax.swing.JPanel gForcePanel; + private javax.swing.JButton getStatusButton; + private javax.swing.JPanel getStatusPanel; + private javax.swing.JPanel irViewPanel; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JButton led1Button; + private javax.swing.JButton led2Button; + private javax.swing.JButton led3Button; + private javax.swing.JButton led4Button; + private javax.swing.JPanel leftPanel; + private javax.swing.JLabel messageLabelText; + private javax.swing.JLabel messageText; + private javax.swing.JPanel messagesPanel; + private javax.swing.JPanel motionSensingPanel; + private javax.swing.JButton mouseIRControlButton; + private javax.swing.JSpinner normalTimeoutSpinner; + private javax.swing.JLabel normalTimeoutText; + private javax.swing.JButton orientationThresholdButton; + private javax.swing.JTextField orientationThresholdTextField; + private javax.swing.JButton reconnectWiimotesButton; + private javax.swing.JPanel rightPanel; + private javax.swing.JPanel setAccelerationThresholdPanel; + private javax.swing.JPanel setAlphaSmoothingPanel; + private javax.swing.JPanel setIRConfPanel; + private javax.swing.JButton setIrSensitivyButton; + private javax.swing.JPanel setIrSensitivyPanel; + private javax.swing.JSpinner setIrSensitivySpinner; + private javax.swing.JButton setLedsButton; + private javax.swing.JPanel setLedsPanel; + private javax.swing.JPanel setOrientationThresholdPanel; + private javax.swing.JButton setTimeoutButton; + private javax.swing.JPanel setTimeoutPanel; + private javax.swing.JButton setVirtualResolutionButton; + private javax.swing.JPanel setVirtualResolutionPanel; + private javax.swing.JButton showExpansionWiimoteButton; + private javax.swing.JPanel startMouseControlPanel; + private javax.swing.JButton toggleContinuousButton; + private javax.swing.JButton toggleIRTrackingButton; + private javax.swing.JButton toggleMotionSensingTrackingButton; + private javax.swing.JButton toggleRumbleButton; + private javax.swing.JButton toggleScreenAspectRatioButton; + private javax.swing.JButton toggleSensorBarPositionButton; + private javax.swing.JButton toggleSmoothingButton; + private javax.swing.JLabel xLabel; + private javax.swing.JTextField xResolutionTextField; + private javax.swing.JLabel yLabel; + private javax.swing.JTextField yResolutionTextField; + // End of variables declaration//GEN-END:variables } diff --git a/WiiUseJ/src/wiiusej/utils/ClassicControllerButtonsEventPanel.java b/WiiUseJ/src/wiiusej/utils/ClassicControllerButtonsEventPanel.java index 0cda7d8..9bec5a9 100644 --- a/WiiUseJ/src/wiiusej/utils/ClassicControllerButtonsEventPanel.java +++ b/WiiUseJ/src/wiiusej/utils/ClassicControllerButtonsEventPanel.java @@ -165,16 +165,16 @@ public class ClassicControllerButtonsEventPanel extends javax.swing.JPanel imple if (buttons.isButtonBJustReleased()) { drawFunction(g2, releasedColor, 269, 98, shapeButton); } - + /* button Down */ if (buttons.isButtonDownJustPressed()) { - drawFunction(g2, pressedColor, 53, 353, shapeButton); + drawFunction(g2, pressedColor, 60, 97, shapeButton); } if (buttons.isButtonDownHeld()) { - drawFunction(g2, heldColor, 53, 353, shapeButton); + drawFunction(g2, heldColor, 60, 97, shapeButton); } if (buttons.isButtonDownJustReleased()) { - drawFunction(g2, releasedColor, 53, 353, shapeButton); + drawFunction(g2, releasedColor, 60, 97, shapeButton); } /* button FullLeft */ @@ -256,13 +256,13 @@ public class ClassicControllerButtonsEventPanel extends javax.swing.JPanel imple /* button Up */ if (buttons.isButtonUpJustPressed()) { - drawFunction(g2, pressedColor, 59, 50, shapeButton); + drawFunction(g2, pressedColor, 60, 50, shapeButton); } if (buttons.isButtonUpHeld()) { - drawFunction(g2, heldColor, 59, 50, shapeButton); + drawFunction(g2, heldColor, 60, 50, shapeButton); } if (buttons.isButtonUpJustReleased()) { - drawFunction(g2, releasedColor, 59, 50, shapeButton); + drawFunction(g2, releasedColor, 60, 50, shapeButton); } /* button X */