package com.intellij.lang.javascript.flex.run;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static com.intellij.lang.javascript.flex.run.FlashRunnerParameters.AirMobileDebugTransport;
import static com.intellij.lang.javascript.flex.run.RemoteFlashRunnerParameters.RemoteDebugTarget;
public class RemoteFlashRunConfigurationForm extends SettingsEditor<RemoteFlashRunConfiguration> {
private JPanel myMainPanel;
private BCCombo myBCCombo;
private JRadioButton myOnComputerRadioButton;
private JRadioButton myOnAndroidDeviceRadioButton;
private JRadioButton myOnIOSDeviceRadioButton;
private JPanel myDeviceOptionsPanel;
private JRadioButton myDebugOverNetworkRadioButton;
private JRadioButton myDebugOverUSBRadioButton;
private JTextField myUsbDebugPortTextField;
private final Project myProject;
public RemoteFlashRunConfigurationForm(final Project project) {
myProject = project;
final ActionListener listener = new ActionListener() {
public void actionPerformed(final ActionEvent e) {
updateControls();
}
};
myOnComputerRadioButton.addActionListener(listener);
myOnAndroidDeviceRadioButton.addActionListener(listener);
myOnIOSDeviceRadioButton.addActionListener(listener);
myDebugOverNetworkRadioButton.addActionListener(listener);
myDebugOverUSBRadioButton.addActionListener(listener);
}
@NotNull
protected JComponent createEditor() {
return myMainPanel;
}
protected void resetEditorFrom(@NotNull final RemoteFlashRunConfiguration configuration) {
final RemoteFlashRunnerParameters params = configuration.getRunnerParameters();
myBCCombo.resetFrom(params);
myOnComputerRadioButton.setSelected(params.getRemoteDebugTarget() == RemoteDebugTarget.Computer);
myOnAndroidDeviceRadioButton.setSelected(params.getRemoteDebugTarget() == RemoteDebugTarget.AndroidDevice);
myOnIOSDeviceRadioButton.setSelected(params.getRemoteDebugTarget() == RemoteDebugTarget.iOSDevice);
myDebugOverNetworkRadioButton.setSelected(params.getDebugTransport() == AirMobileDebugTransport.Network);
myDebugOverUSBRadioButton.setSelected(params.getDebugTransport() == AirMobileDebugTransport.USB);
myUsbDebugPortTextField.setText(String.valueOf(params.getUsbDebugPort()));
updateControls();
}
protected void applyEditorTo(@NotNull final RemoteFlashRunConfiguration configuration) throws ConfigurationException {
final RemoteFlashRunnerParameters params = configuration.getRunnerParameters();
myBCCombo.applyTo(params);
final RemoteDebugTarget remoteDebugTarget = myOnComputerRadioButton.isSelected()
? RemoteDebugTarget.Computer
: myOnAndroidDeviceRadioButton.isSelected()
? RemoteDebugTarget.AndroidDevice
: RemoteDebugTarget.iOSDevice;
params.setRemoteDebugTarget(remoteDebugTarget);
params.setDebugTransport(myDebugOverNetworkRadioButton.isSelected()
? AirMobileDebugTransport.Network
: AirMobileDebugTransport.USB);
try {
final int port = Integer.parseInt(myUsbDebugPortTextField.getText().trim());
if (port > 0 && port < 65535) {
params.setUsbDebugPort(port);
}
}
catch (NumberFormatException ignore) {/*ignore*/}
}
protected void disposeEditor() {
myBCCombo.dispose();
}
private void updateControls() {
UIUtil.setEnabled(myDeviceOptionsPanel, myOnAndroidDeviceRadioButton.isSelected() || myOnIOSDeviceRadioButton.isSelected(), true);
myUsbDebugPortTextField.setEnabled(myDebugOverUSBRadioButton.isEnabled() && myDebugOverUSBRadioButton.isSelected());
}
private void createUIComponents() {
myBCCombo = new BCCombo(myProject);
}
}