package info.u250.c2d.box2deditor.ui.controls; import info.u250.c2d.box2deditor.adapter.PrismaticJointDefModel; import info.u250.c2d.box2deditor.gdx.support.Geometry; import info.u250.c2d.box2deditor.ui.Binder; import java.awt.GridBagConstraints; import java.awt.Insets; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; public class PrismaticJointDefPropertiesPanel extends JointDefPropertiesPanel{ public PrismaticJointDefPropertiesPanel() { lblLocalaxisax = new JLabel("localAxisAx:"); GridBagConstraints gbc_lblLocalaxisax = new GridBagConstraints(); gbc_lblLocalaxisax.insets = new Insets(0, 0, 5, 5); gbc_lblLocalaxisax.gridx = 0; gbc_lblLocalaxisax.gridy = 6; getPanel().add(lblLocalaxisax, gbc_lblLocalaxisax); spinnerLocalAxisAx = new JSpinner(); spinnerLocalAxisAx.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerLocalAxisAx = new GridBagConstraints(); gbc_spinnerLocalAxisAx.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerLocalAxisAx.insets = new Insets(0, 0, 5, 0); gbc_spinnerLocalAxisAx.gridx = 1; gbc_spinnerLocalAxisAx.gridy = 6; getPanel().add(spinnerLocalAxisAx, gbc_spinnerLocalAxisAx); lblLocalAxisAy = new JLabel("localAxisAy:"); GridBagConstraints gbc_lblLocalAxisAy = new GridBagConstraints(); gbc_lblLocalAxisAy.insets = new Insets(0, 0, 5, 5); gbc_lblLocalAxisAy.gridx = 0; gbc_lblLocalAxisAy.gridy = 7; getPanel().add(lblLocalAxisAy, gbc_lblLocalAxisAy); spinnerLocalAxisAy = new JSpinner(); spinnerLocalAxisAy.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerLocalAxisA = new GridBagConstraints(); gbc_spinnerLocalAxisA.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerLocalAxisA.insets = new Insets(0, 0, 5, 0); gbc_spinnerLocalAxisA.gridx = 1; gbc_spinnerLocalAxisA.gridy = 7; getPanel().add(spinnerLocalAxisAy, gbc_spinnerLocalAxisA); chckbxUseBodyabCenter = new JCheckBox("Use BodyA/B Center Line"); GridBagConstraints gbc_chckbxUseBodyabCenter = new GridBagConstraints(); gbc_chckbxUseBodyabCenter.anchor = GridBagConstraints.WEST; gbc_chckbxUseBodyabCenter.insets = new Insets(0, 0, 5, 0); gbc_chckbxUseBodyabCenter.gridx = 1; gbc_chckbxUseBodyabCenter.gridy = 8; getPanel().add(chckbxUseBodyabCenter, gbc_chckbxUseBodyabCenter); JLabel lblLocalanchorax = new JLabel("localAnchorA-x:"); GridBagConstraints gbc_lblLocalanchorax = new GridBagConstraints(); gbc_lblLocalanchorax.insets = new Insets(0, 0, 5, 5); gbc_lblLocalanchorax.gridx = 0; gbc_lblLocalanchorax.gridy = 9; getPanel().add(lblLocalanchorax, gbc_lblLocalanchorax); spinnerLocalAnchorAX = new JSpinner(); spinnerLocalAnchorAX.setEnabled(false); spinnerLocalAnchorAX.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerLocalAnchorAX = new GridBagConstraints(); gbc_spinnerLocalAnchorAX.insets = new Insets(0, 0, 5, 0); gbc_spinnerLocalAnchorAX.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerLocalAnchorAX.gridx = 1; gbc_spinnerLocalAnchorAX.gridy = 9; getPanel().add(spinnerLocalAnchorAX, gbc_spinnerLocalAnchorAX); JLabel lblLocalanchoray = new JLabel("localAnchorA-y:"); GridBagConstraints gbc_lblLocalanchoray = new GridBagConstraints(); gbc_lblLocalanchoray.insets = new Insets(0, 0, 5, 5); gbc_lblLocalanchoray.gridx = 0; gbc_lblLocalanchoray.gridy = 10; getPanel().add(lblLocalanchoray, gbc_lblLocalanchoray); spinnerLocalAnchorAY = new JSpinner(); spinnerLocalAnchorAY.setEnabled(false); spinnerLocalAnchorAY.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerLocalAnchorAY = new GridBagConstraints(); gbc_spinnerLocalAnchorAY.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerLocalAnchorAY.insets = new Insets(0, 0, 5, 0); gbc_spinnerLocalAnchorAY.gridx = 1; gbc_spinnerLocalAnchorAY.gridy = 10; getPanel().add(spinnerLocalAnchorAY, gbc_spinnerLocalAnchorAY); chckbxUseBodyaCenter = new JCheckBox("Use BodyA Center"); GridBagConstraints gbc_chckbxUseBodyaCenter = new GridBagConstraints(); gbc_chckbxUseBodyaCenter.anchor = GridBagConstraints.WEST; gbc_chckbxUseBodyaCenter.insets = new Insets(0, 0, 5, 0); gbc_chckbxUseBodyaCenter.gridx = 1; gbc_chckbxUseBodyaCenter.gridy = 11; getPanel().add(chckbxUseBodyaCenter, gbc_chckbxUseBodyaCenter); JLabel lblLocalanchorbx = new JLabel("localAnchorB-x:"); GridBagConstraints gbc_lblLocalanchorbx = new GridBagConstraints(); gbc_lblLocalanchorbx.insets = new Insets(0, 0, 5, 5); gbc_lblLocalanchorbx.gridx = 0; gbc_lblLocalanchorbx.gridy = 12; getPanel().add(lblLocalanchorbx, gbc_lblLocalanchorbx); spinnerLocalAnchorBx = new JSpinner(); spinnerLocalAnchorBx.setEnabled(false); spinnerLocalAnchorBx.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerLocalAnchorBx = new GridBagConstraints(); gbc_spinnerLocalAnchorBx.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerLocalAnchorBx.insets = new Insets(0, 0, 5, 0); gbc_spinnerLocalAnchorBx.gridx = 1; gbc_spinnerLocalAnchorBx.gridy = 12; getPanel().add(spinnerLocalAnchorBx, gbc_spinnerLocalAnchorBx); JLabel lblLocalanchorby = new JLabel("localAnchorB-y:"); GridBagConstraints gbc_lblLocalanchorby = new GridBagConstraints(); gbc_lblLocalanchorby.insets = new Insets(0, 0, 5, 5); gbc_lblLocalanchorby.gridx = 0; gbc_lblLocalanchorby.gridy = 13; getPanel().add(lblLocalanchorby, gbc_lblLocalanchorby); spinnerLocalAnchorBy = new JSpinner(); spinnerLocalAnchorBy.setEnabled(false); spinnerLocalAnchorBy.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerLocalAnchorBy = new GridBagConstraints(); gbc_spinnerLocalAnchorBy.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerLocalAnchorBy.insets = new Insets(0, 0, 5, 0); gbc_spinnerLocalAnchorBy.gridx = 1; gbc_spinnerLocalAnchorBy.gridy = 13; getPanel().add(spinnerLocalAnchorBy, gbc_spinnerLocalAnchorBy); chckbxUseBodybCenter = new JCheckBox("Use BodyB Center"); GridBagConstraints gbc_chckbxUseBodybCenter = new GridBagConstraints(); gbc_chckbxUseBodybCenter.anchor = GridBagConstraints.WEST; gbc_chckbxUseBodybCenter.insets = new Insets(0, 0, 5, 0); gbc_chckbxUseBodybCenter.gridx = 1; gbc_chckbxUseBodybCenter.gridy = 14; getPanel().add(chckbxUseBodybCenter, gbc_chckbxUseBodybCenter); lblReferenceangle = new JLabel("referenceAngle:"); GridBagConstraints gbc_lblReferenceangle = new GridBagConstraints(); gbc_lblReferenceangle.insets = new Insets(0, 0, 5, 5); gbc_lblReferenceangle.gridx = 0; gbc_lblReferenceangle.gridy = 15; getPanel().add(lblReferenceangle, gbc_lblReferenceangle); spinnerReferenceAngle = new JSpinner(); spinnerReferenceAngle.setEnabled(false); spinnerReferenceAngle.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerReferenceAngle = new GridBagConstraints(); gbc_spinnerReferenceAngle.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerReferenceAngle.insets = new Insets(0, 0, 5, 0); gbc_spinnerReferenceAngle.gridx = 1; gbc_spinnerReferenceAngle.gridy = 15; getPanel().add(spinnerReferenceAngle, gbc_spinnerReferenceAngle); lblAnchorx = new JLabel("anchorX:"); GridBagConstraints gbc_lblAnchorx = new GridBagConstraints(); gbc_lblAnchorx.insets = new Insets(0, 0, 5, 5); gbc_lblAnchorx.gridx = 0; gbc_lblAnchorx.gridy = 16; getPanel().add(lblAnchorx, gbc_lblAnchorx); spinnerAnchorx = new JSpinner(); spinnerAnchorx.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerAnchorx = new GridBagConstraints(); gbc_spinnerAnchorx.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerAnchorx.insets = new Insets(0, 0, 5, 0); gbc_spinnerAnchorx.gridx = 1; gbc_spinnerAnchorx.gridy = 16; getPanel().add(spinnerAnchorx, gbc_spinnerAnchorx); lblAnchory = new JLabel("anchorY:"); GridBagConstraints gbc_lblAnchory = new GridBagConstraints(); gbc_lblAnchory.insets = new Insets(0, 0, 5, 5); gbc_lblAnchory.gridx = 0; gbc_lblAnchory.gridy = 17; getPanel().add(lblAnchory, gbc_lblAnchory); spinnerAnchory = new JSpinner(); spinnerAnchory.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerAnchory = new GridBagConstraints(); gbc_spinnerAnchory.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerAnchory.insets = new Insets(0, 0, 5, 0); gbc_spinnerAnchory.gridx = 1; gbc_spinnerAnchory.gridy = 17; getPanel().add(spinnerAnchory, gbc_spinnerAnchory); lblEnablelimit = new JLabel("enableLimit:"); GridBagConstraints gbc_lblEnablelimit = new GridBagConstraints(); gbc_lblEnablelimit.insets = new Insets(0, 0, 5, 5); gbc_lblEnablelimit.gridx = 0; gbc_lblEnablelimit.gridy = 18; getPanel().add(lblEnablelimit, gbc_lblEnablelimit); chckbxEnablelimit = new JCheckBox("enableLimit"); GridBagConstraints gbc_chckbxEnablelimit = new GridBagConstraints(); gbc_chckbxEnablelimit.anchor = GridBagConstraints.WEST; gbc_chckbxEnablelimit.insets = new Insets(0, 0, 5, 0); gbc_chckbxEnablelimit.gridx = 1; gbc_chckbxEnablelimit.gridy = 18; getPanel().add(chckbxEnablelimit, gbc_chckbxEnablelimit); lblLowerTranslation = new JLabel("lowerTranslation:"); GridBagConstraints gbc_lblLowerTranslation = new GridBagConstraints(); gbc_lblLowerTranslation.insets = new Insets(0, 0, 5, 5); gbc_lblLowerTranslation.gridx = 0; gbc_lblLowerTranslation.gridy = 19; getPanel().add(lblLowerTranslation, gbc_lblLowerTranslation); spinnerLowerTranslation = new JSpinner(); spinnerLowerTranslation.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerLowerTranslation = new GridBagConstraints(); gbc_spinnerLowerTranslation.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerLowerTranslation.insets = new Insets(0, 0, 5, 0); gbc_spinnerLowerTranslation.gridx = 1; gbc_spinnerLowerTranslation.gridy = 19; getPanel().add(spinnerLowerTranslation, gbc_spinnerLowerTranslation); lblUpperTranslation = new JLabel("upperTranslation:"); GridBagConstraints gbc_lblUpperTranslation = new GridBagConstraints(); gbc_lblUpperTranslation.insets = new Insets(0, 0, 5, 5); gbc_lblUpperTranslation.gridx = 0; gbc_lblUpperTranslation.gridy = 20; getPanel().add(lblUpperTranslation, gbc_lblUpperTranslation); spinnerUpperTranslation = new JSpinner(); spinnerUpperTranslation.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerUpperTranslation = new GridBagConstraints(); gbc_spinnerUpperTranslation.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerUpperTranslation.insets = new Insets(0, 0, 5, 0); gbc_spinnerUpperTranslation.gridx = 1; gbc_spinnerUpperTranslation.gridy = 20; getPanel().add(spinnerUpperTranslation, gbc_spinnerUpperTranslation); lblEnablemotor = new JLabel("enableMotor:"); GridBagConstraints gbc_lblEnablemotor = new GridBagConstraints(); gbc_lblEnablemotor.insets = new Insets(0, 0, 5, 5); gbc_lblEnablemotor.gridx = 0; gbc_lblEnablemotor.gridy = 21; getPanel().add(lblEnablemotor, gbc_lblEnablemotor); chckbxEnablemotor = new JCheckBox("enableMotor"); GridBagConstraints gbc_chckbxEnablemotor = new GridBagConstraints(); gbc_chckbxEnablemotor.anchor = GridBagConstraints.WEST; gbc_chckbxEnablemotor.insets = new Insets(0, 0, 5, 0); gbc_chckbxEnablemotor.gridx = 1; gbc_chckbxEnablemotor.gridy = 21; getPanel().add(chckbxEnablemotor, gbc_chckbxEnablemotor); lblMotorspeed = new JLabel("motorSpeed:"); GridBagConstraints gbc_lblMotorspeed = new GridBagConstraints(); gbc_lblMotorspeed.insets = new Insets(0, 0, 5, 5); gbc_lblMotorspeed.gridx = 0; gbc_lblMotorspeed.gridy = 22; getPanel().add(lblMotorspeed, gbc_lblMotorspeed); spinnerMotorSpeed = new JSpinner(); spinnerMotorSpeed.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerMotorSpeed = new GridBagConstraints(); gbc_spinnerMotorSpeed.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerMotorSpeed.insets = new Insets(0, 0, 5, 0); gbc_spinnerMotorSpeed.gridx = 1; gbc_spinnerMotorSpeed.gridy = 22; getPanel().add(spinnerMotorSpeed, gbc_spinnerMotorSpeed); lblMaxMotorForce = new JLabel("maxMotorForce:"); GridBagConstraints gbc_lblMaxMotorForce = new GridBagConstraints(); gbc_lblMaxMotorForce.insets = new Insets(0, 0, 5, 5); gbc_lblMaxMotorForce.gridx = 0; gbc_lblMaxMotorForce.gridy = 23; getPanel().add(lblMaxMotorForce, gbc_lblMaxMotorForce); spinnerMaxMotorForce = new JSpinner(); spinnerMaxMotorForce.setModel(new SpinnerNumberModel(new Float(0), null, null, new Float(1))); GridBagConstraints gbc_spinnerMaxMotorForce = new GridBagConstraints(); gbc_spinnerMaxMotorForce.fill = GridBagConstraints.HORIZONTAL; gbc_spinnerMaxMotorForce.insets = new Insets(0, 0, 5, 0); gbc_spinnerMaxMotorForce.gridx = 1; gbc_spinnerMaxMotorForce.gridy = 23; getPanel().add(spinnerMaxMotorForce, gbc_spinnerMaxMotorForce); chckbxUseBodyaCenter.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(chckbxUseBodyaCenter.isSelected()){ PrismaticJointDefModel.class.cast(object).useBodyBCenter = false; chckbxUseBodybCenter.setSelected(false); } } }); chckbxUseBodybCenter.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(chckbxUseBodybCenter.isSelected()){ PrismaticJointDefModel.class.cast(object).useBodyACenter = false; chckbxUseBodyaCenter.setSelected(false); } } }); } private static final long serialVersionUID = -2033825670615410634L; private JSpinner spinnerLocalAnchorAX; private JSpinner spinnerLocalAnchorBy; private JSpinner spinnerLocalAnchorBx; private JSpinner spinnerLocalAnchorAY; private JLabel lblAnchorx; private JSpinner spinnerAnchorx; private JLabel lblAnchory; private JSpinner spinnerAnchory; private JLabel lblReferenceangle; private JSpinner spinnerReferenceAngle; private JLabel lblEnablelimit; private JCheckBox chckbxEnablelimit; private JLabel lblLowerTranslation; private JSpinner spinnerLowerTranslation; private JLabel lblUpperTranslation; private JSpinner spinnerUpperTranslation; private JLabel lblEnablemotor; private JCheckBox chckbxEnablemotor; private JLabel lblMotorspeed; private JSpinner spinnerMotorSpeed; private JLabel lblMaxMotorForce; private JSpinner spinnerMaxMotorForce; private JLabel lblLocalaxisax; private JSpinner spinnerLocalAxisAx; private JLabel lblLocalAxisAy; private JSpinner spinnerLocalAxisAy; private JCheckBox chckbxUseBodyaCenter; private JCheckBox chckbxUseBodybCenter; private JCheckBox chckbxUseBodyabCenter; @Override public Class<PrismaticJointDefModel> getType() { return PrismaticJointDefModel.class; } @Override public void doBinder() { super.doBinder(); PrismaticJointDefModel model = PrismaticJointDefModel.class.cast(object); bind(model.anchor,"x",spinnerAnchorx); bind(model.anchor,"y",spinnerAnchory); bind(model,"maxMotorForce",spinnerMaxMotorForce); bind(model,"motorSpeed",spinnerMotorSpeed); bind(model,"enableMotor",chckbxEnablemotor); bind(model,"upperTranslation",spinnerUpperTranslation); bind(model,"lowerTranslation",spinnerLowerTranslation); bind(model,"enableLimit",chckbxEnablelimit); bind(model,"useBodyACenter",chckbxUseBodyaCenter); bind(model,"useBodyBCenter",chckbxUseBodybCenter); bind(model,"useABCenterLine",chckbxUseBodyabCenter); bind(model.localAxisA,"x",spinnerLocalAxisAx); bind(model.localAxisA,"y",spinnerLocalAxisAy); } @Override public Binder getBinder(Object obj, String name, final JComponent widget) { return new Binder(obj,name,widget) { @Override protected void postSolve() { PrismaticJointDefModel model = PrismaticJointDefModel.class.cast(object); Geometry.ajustJoint(model); if(chckbxUseBodyaCenter.isSelected()){ spinnerAnchorx.setValue(model.bodyA.position.x); spinnerAnchory.setValue(model.bodyA.position.y); }else{ if(chckbxUseBodybCenter.isSelected()){ spinnerAnchorx.setValue(model.bodyB.position.x); spinnerAnchory.setValue(model.bodyB.position.y); } } spinnerLocalAnchorAX.setValue(model.localAnchorA.x); spinnerLocalAnchorAY.setValue(model.localAnchorA.y); spinnerLocalAnchorBx.setValue(model.localAnchorB.x); spinnerLocalAnchorBy.setValue(model.localAnchorB.y); spinnerReferenceAngle.setValue(model.referenceDegrees); if(widget != spinnerLocalAxisAx)spinnerLocalAxisAx.setValue(model.localAxisA.x); if(widget != spinnerLocalAxisAy)spinnerLocalAxisAy.setValue(model.localAxisA.y); } }; } }