Package org.jetbrains.plugins.clojure.runner

Source Code of org.jetbrains.plugins.clojure.runner.ClojureRunConfigurationEditor

package org.jetbrains.plugins.clojure.runner;

import com.intellij.execution.configuration.EnvironmentVariablesComponent;
import com.intellij.ide.util.BrowseFilesListener;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.FieldPanel;
import com.intellij.ui.RawCommandLineEditor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.clojure.file.ClojureFileType;
import org.jetbrains.plugins.clojure.ClojureBundle;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;

/**
* Created by IntelliJ IDEA.
* User: peter
* Date: Jan 8, 2009
* Time: 11:15:58 AM
* Copyright 2007, 2008, 2009 Red Shark Technology
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
public class ClojureRunConfigurationEditor extends SettingsEditor<ClojureScriptRunConfiguration> {

  private final EnvironmentVariablesComponent myEnvVariables = new EnvironmentVariablesComponent();
  private DefaultComboBoxModel myModulesModel;
  private JComboBox myModulesBox;
  private JPanel myMainPanel;
  private RawCommandLineEditor myVMParameters;
  private RawCommandLineEditor myParameters;
  private JPanel scriptPathPanel;
  private JPanel workDirPanel;
  private JCheckBox myReplCB;
  private JPanel myEnvPanel;
  private JCheckBox runMainFunction;
  private JTextField scriptPathField;
  private JTextField workDirField;

  public ClojureRunConfigurationEditor() {
    scriptPathField = new JTextField();
    final BrowseFilesListener scriptBrowseListener = new BrowseFilesListener(scriptPathField,
        ClojureBundle.message("script.path"),
        ClojureBundle.message("spec.path.to.script"),
        new FileChooserDescriptor(true, false, false, false, false, false) {
          public boolean isFileSelectable(VirtualFile file) {
            return file.getFileType() == ClojureFileType.CLOJURE_FILE_TYPE;
          }
        });

    final FieldPanel scriptFieldPanel = new FieldPanel(scriptPathField, ClojureBundle.message("script.path") + ":", null, scriptBrowseListener, null);
    scriptPathPanel.setLayout(new BorderLayout());
    scriptPathPanel.add(scriptFieldPanel, BorderLayout.CENTER);

    workDirField = new JTextField();
    final BrowseFilesListener workDirBrowseFilesListener = new BrowseFilesListener(workDirField,
        ClojureBundle.message("work.dir"),
        ClojureBundle.message("specify.work.dir"),
        BrowseFilesListener.SINGLE_DIRECTORY_DESCRIPTOR);
    final FieldPanel workDirFieldPanel = new FieldPanel(workDirField, ClojureBundle.message("work.dir")+ ":", null, workDirBrowseFilesListener, null);
    workDirPanel.setLayout(new BorderLayout());
    workDirPanel.add(workDirFieldPanel, BorderLayout.CENTER);

    myEnvVariables.setLabelLocation(BorderLayout.WEST);
    myEnvPanel.add(myEnvVariables);

    runMainFunction.getModel().addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
        updateReplCheckBoxState();
      }
    });

    updateReplCheckBoxState();
  }

  private void updateReplCheckBoxState() {
    myReplCB.setEnabled(!runMainFunction.isSelected());
  }

  public void resetEditorFrom(ClojureScriptRunConfiguration configuration) {
    myVMParameters.setDialogCaption(ClojureBundle.message("vm.params"));
    myVMParameters.setText(configuration.getVmParams());

    myParameters.setDialogCaption(ClojureBundle.message("script.params"));
    myParameters.setText(configuration.getScriptParams());

    scriptPathField.setText(configuration.getScriptPath());
    workDirField.setText(configuration.getWorkDir());

    myReplCB.setSelected(configuration.getRunInREPL());

    runMainFunction.setSelected(configuration.getRunMainFunction());

    myModulesModel.removeAllElements();
    for (Module module : configuration.getValidModules()) {
      myModulesModel.addElement(module);
    }
    myModulesModel.setSelectedItem(configuration.getModule());

    myEnvVariables.setEnvs(configuration.getEnvs());
  }

  public void applyEditorTo(ClojureScriptRunConfiguration configuration) throws ConfigurationException {
    configuration.setModule((Module) myModulesBox.getSelectedItem());
    configuration.setVmParams(myVMParameters.getText());
    configuration.setRunInREPL(myReplCB.isSelected());
    configuration.setRunMainFunction(runMainFunction.isSelected());
    configuration.setScriptParams(myParameters.getText());
    configuration.setScriptPath(scriptPathField.getText());
    configuration.setWorkDir(workDirField.getText());
    configuration.setEnvs(myEnvVariables.getEnvs());
  }

  @NotNull
  public JComponent createEditor() {
    myModulesModel = new DefaultComboBoxModel();
    myModulesBox.setModel(myModulesModel);
    myReplCB.setSelected(false);

    myModulesBox.setRenderer(new DefaultListCellRenderer() {
      public Component getListCellRendererComponent(JList list, final Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        final Module module = (Module) value;
        if (module != null) {
          setIcon(ModuleType.get(module).getNodeIcon(false));
          setText(module.getName());
        }
        return this;
      }
    });

    return myMainPanel;
  }

  public void disposeEditor() {
  }
}
TOP

Related Classes of org.jetbrains.plugins.clojure.runner.ClojureRunConfigurationEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.