package com.intellij.lang.javascript.flex.run; import com.intellij.ide.browsers.BrowserFamily; import com.intellij.ide.browsers.BrowserSelector; import com.intellij.ide.browsers.WebBrowser; import com.intellij.ide.browsers.WebBrowserManager; import com.intellij.lang.javascript.flex.FlexBundle; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.components.JBCheckBox; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class FlexLauncherDialog extends DialogWrapper { private JPanel myMainPanel; private JRadioButton myDefaultOSApplicationRadioButton; private JRadioButton myBrowserRadioButton; private JPanel myBrowserSelectorPanel; private final BrowserSelector myBrowserSelector; private JRadioButton myPlayerRadioButton; private TextFieldWithBrowseButton myPlayerTextWithBrowse; private JBCheckBox myNewPlayerInstanceCheckBox; private final Project myProject; public FlexLauncherDialog(final Project project, final LauncherParameters launcherParameters) { super(project); myProject = project; setTitle(FlexBundle.message("launch.with.title")); myBrowserSelector = new BrowserSelector(false); myBrowserSelectorPanel.add(BorderLayout.CENTER, myBrowserSelector.getMainComponent()); initRadioButtons(); initControls(launcherParameters); updateControls(); init(); } private void initRadioButtons() { myDefaultOSApplicationRadioButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateControls(); } }); myBrowserRadioButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateControls(); IdeFocusManager.getInstance(myProject).requestFocus(myBrowserSelector.getMainComponent(), true); } }); myPlayerRadioButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateControls(); IdeFocusManager.getInstance(myProject).requestFocus(myPlayerTextWithBrowse.getTextField(), true); } }); } private void initControls(final LauncherParameters launcherParameters) { final LauncherParameters.LauncherType launcherType = launcherParameters.getLauncherType(); myDefaultOSApplicationRadioButton.setSelected(launcherType == LauncherParameters.LauncherType.OSDefault); myBrowserRadioButton.setSelected(launcherType == LauncherParameters.LauncherType.Browser); myPlayerRadioButton.setSelected(launcherType == LauncherParameters.LauncherType.Player); myBrowserSelector.setSelected(launcherParameters.getBrowser()); myPlayerTextWithBrowse.setText(FileUtil.toSystemDependentName(launcherParameters.getPlayerPath())); myPlayerTextWithBrowse .addBrowseFolderListener(null, null, myProject, new FileChooserDescriptor(true, true, false, false, false, false) { @Override public boolean isFileSelectable(final VirtualFile file) { return SystemInfo.isMac && file.isDirectory() && "app".equalsIgnoreCase(file.getExtension()) || !file.isDirectory(); } }); myNewPlayerInstanceCheckBox.setVisible(SystemInfo.isMac); } private void updateControls() { myBrowserSelector.getMainComponent().setEnabled(myBrowserRadioButton.isSelected()); myPlayerTextWithBrowse.setEnabled(myPlayerRadioButton.isSelected()); myNewPlayerInstanceCheckBox.setEnabled(myPlayerRadioButton.isSelected()); } @Override protected JComponent createCenterPanel() { return myMainPanel; } public LauncherParameters getLauncherParameters() { final LauncherParameters.LauncherType launcherType = myPlayerRadioButton.isSelected() ? LauncherParameters.LauncherType.Player : myBrowserRadioButton.isSelected() ? LauncherParameters.LauncherType.Browser : LauncherParameters.LauncherType.OSDefault; final WebBrowser browser = myBrowserSelector.getSelected(); final WebBrowser notNullBrowser = browser == null ? WebBrowserManager.getInstance().getFirstBrowser(BrowserFamily.FIREFOX) : browser; final String playerPath = FileUtil.toSystemIndependentName(myPlayerTextWithBrowse.getText().trim()); final boolean isNewPlayerInstance = myNewPlayerInstanceCheckBox.isSelected(); return new LauncherParameters(launcherType, notNullBrowser, playerPath, isNewPlayerInstance); } }