cad905fd9618d73da7b31f0a2c465f44bcf301f0
[idea/community.git] / python / src / com / jetbrains / python / run / PythonRunConfigurationForm.java
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.jetbrains.python.run;
17
18 import com.intellij.openapi.fileChooser.FileChooserDescriptor;
19 import com.intellij.openapi.project.Project;
20 import com.intellij.openapi.ui.ComponentWithBrowseButton;
21 import com.intellij.openapi.ui.TextComponentAccessor;
22 import com.intellij.openapi.ui.TextFieldWithBrowseButton;
23 import com.intellij.openapi.util.Comparing;
24 import com.intellij.openapi.util.io.FileUtil;
25 import com.intellij.openapi.vfs.VirtualFile;
26 import com.intellij.ui.PanelWithAnchor;
27 import com.intellij.ui.RawCommandLineEditor;
28 import com.intellij.ui.components.JBCheckBox;
29 import com.intellij.ui.components.JBLabel;
30 import com.jetbrains.python.debugger.PyDebuggerOptionsProvider;
31 import org.jetbrains.annotations.NotNull;
32
33 import javax.swing.*;
34 import java.awt.*;
35
36 /**
37  * @author yole
38  */
39 public class PythonRunConfigurationForm implements PythonRunConfigurationParams, PanelWithAnchor {
40   private JPanel myRootPanel;
41   private TextFieldWithBrowseButton myScriptTextField;
42   private RawCommandLineEditor myScriptParametersTextField;
43   private JPanel myCommonOptionsPlaceholder;
44   private JBLabel myScriptParametersLabel;
45   private final AbstractPyCommonOptionsForm myCommonOptionsForm;
46   private JComponent anchor;
47   private final Project myProject;
48   private JBCheckBox myShowCommandLineCheckbox;
49
50   public PythonRunConfigurationForm(PythonRunConfiguration configuration) {
51     myCommonOptionsForm = PyCommonOptionsFormFactory.getInstance().createForm(configuration.getCommonOptionsFormData());
52     myCommonOptionsPlaceholder.add(myCommonOptionsForm.getMainPanel(), BorderLayout.CENTER);
53
54     myProject = configuration.getProject();
55
56     FileChooserDescriptor chooserDescriptor = new FileChooserDescriptor(true, false, false, false, false, false) {
57       @Override
58       public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) {
59         return file.isDirectory() || file.getExtension() == null || Comparing.equal(file.getExtension(), "py");
60       }
61     };
62     //chooserDescriptor.setRoot(s.getProject().getBaseDir());
63
64     ComponentWithBrowseButton.BrowseFolderActionListener<JTextField> listener =
65       new ComponentWithBrowseButton.BrowseFolderActionListener<JTextField>("Select Script", "", myScriptTextField, myProject,
66                                                                            chooserDescriptor, TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT) {
67
68         @Override
69         protected void onFileChosen(@NotNull VirtualFile chosenFile) {
70           super.onFileChosen(chosenFile);
71           myCommonOptionsForm.setWorkingDirectory(chosenFile.getParent().getPath());
72         }
73       };
74
75     myScriptTextField.addActionListener(listener);
76
77     setAnchor(myCommonOptionsForm.getAnchor());
78   }
79
80   public JComponent getPanel() {
81     return myRootPanel;
82   }
83
84   @Override
85   public AbstractPythonRunConfigurationParams getBaseParams() {
86     return myCommonOptionsForm;
87   }
88
89   @Override
90   public String getScriptName() {
91     return FileUtil.toSystemIndependentName(myScriptTextField.getText().trim());
92   }
93
94   @Override
95   public void setScriptName(String scriptName) {
96     myScriptTextField.setText(scriptName == null ? "" : FileUtil.toSystemDependentName(scriptName));
97   }
98
99   @Override
100   public String getScriptParameters() {
101     return myScriptParametersTextField.getText().trim();
102   }
103
104   @Override
105   public void setScriptParameters(String scriptParameters) {
106     myScriptParametersTextField.setText(scriptParameters);
107   }
108
109   @Override
110   public boolean showCommandLineAfterwards() {
111     return myShowCommandLineCheckbox.isSelected();
112   }
113
114   @Override
115   public void setShowCommandLineAfterwards(boolean showCommandLineAfterwards) {
116     myShowCommandLineCheckbox.setSelected(showCommandLineAfterwards);
117   }
118
119   @Override
120   public JComponent getAnchor() {
121     return anchor;
122   }
123
124   public boolean isMultiprocessMode() {
125     return PyDebuggerOptionsProvider.getInstance(myProject).isAttachToSubprocess();
126   }
127
128   public void setMultiprocessMode(boolean multiprocess) {
129   }
130
131   @Override
132   public void setAnchor(JComponent anchor) {
133     this.anchor = anchor;
134     myScriptParametersLabel.setAnchor(anchor);
135     myCommonOptionsForm.setAnchor(anchor);
136   }
137 }