Package vektah.rust.ide.runner

Source Code of vektah.rust.ide.runner.RustRunSettingsEditor

package vektah.rust.ide.runner;

import com.intellij.execution.configurations.ConfigurationUtil;
import com.intellij.execution.ui.ConfigurationModuleSelector;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.psi.JavaCodeFragment;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.ui.EditorTextFieldWithBrowseButton;
import com.intellij.ui.PanelWithAnchor;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import vektah.rust.ide.ui.RustParametersPanel;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class RustRunSettingsEditor extends SettingsEditor<RustConfiguration> implements PanelWithAnchor {
  private final Project project;

  private RustParametersPanel rustParametersPanel;
  private LabeledComponent<EditorTextFieldWithBrowseButton> cmbMainFile;
  private LabeledComponent<JComboBox> cmbModule;
  private JPanel pnlMain;

  private JComponent anchor;

  private final ConfigurationModuleSelector moduleSelector;

  public RustRunSettingsEditor(Project project) {
    this.project = project;

    moduleSelector = new ConfigurationModuleSelector(project, cmbModule.getComponent());
    rustParametersPanel.setModuleContext(moduleSelector.getModule());
    cmbModule.getComponent().addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent actionEvent) {
        rustParametersPanel.setModuleContext(moduleSelector.getModule());
      }
    });

    anchor = UIUtil.mergeComponentsWithAnchor(cmbMainFile, rustParametersPanel, cmbModule);
  }

  @Override
  protected void resetEditorFrom(RustConfiguration configuration) {
    rustParametersPanel.reset(configuration);
    moduleSelector.reset(configuration);
    getMainFileField().setText(configuration.mainFile);
  }

  @Override
  protected void applyEditorTo(RustConfiguration configuration) throws ConfigurationException {
    rustParametersPanel.applyTo(configuration);
    moduleSelector.applyTo(configuration);
    configuration.mainFile = getMainFileField().getText();
  }

  @NotNull
  @Override
  protected JComponent createEditor() {
    return pnlMain;
  }

  @Override
  protected void disposeEditor() {
    super.disposeEditor();
    pnlMain.setVisible(false);
  }

  @Override
  public JComponent getAnchor() {
    return anchor;
  }

  @Override
  public void setAnchor(@Nullable JComponent anchor) {
    this.anchor = anchor;
    cmbMainFile.setAnchor(anchor);
    cmbModule.setAnchor(anchor);
    rustParametersPanel.setAnchor(anchor);
  }

  private void createUIComponents() {
    cmbMainFile = new LabeledComponent<EditorTextFieldWithBrowseButton>();
    cmbMainFile.setComponent(new EditorTextFieldWithBrowseButton(project, true, new JavaCodeFragment.VisibilityChecker() {
      @Override
      public Visibility isDeclarationVisible(PsiElement declaration, PsiElement place) {
//        if (declaration instanceof PsiClass) {
//          final PsiClass aClass = (PsiClass)declaration;
//          if (ConfigurationUtil.MAIN_CLASS.value(aClass) && PsiMethodUtil.findMainMethod(aClass) != null) {
//            return Visibility.VISIBLE;
//          }
//        }
        return Visibility.VISIBLE;
      }
    }));
  }

  public EditorTextFieldWithBrowseButton getMainFileField() {
    return cmbMainFile.getComponent();
  }
}
TOP

Related Classes of vektah.rust.ide.runner.RustRunSettingsEditor

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.