예제 #1
0
  public OptionsForm(Project project) {
    setTitle(Emacs4ijBundle.message("settings.title"));
    setContentPane(panel1);
    myProject = project;
    myProjectComponent = project.getComponent(MyProjectComponent.class);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    emacsHomeService = ServiceManager.getService(EmacsHomeService.class);
    emacsSourceService = ServiceManager.getService(EmacsSourceService.class);
    refreshText();

    browseHomeButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            isHomeValid =
                setServiceParameter(GlobalEnvironment.PropertyType.HOME, homeLabel, homeTextField);
            tryEnableApply();
            focus();
          }
        });
    browseSrcButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            isSourceValid =
                setServiceParameter(GlobalEnvironment.PropertyType.SOURCE, srcLabel, srcTextField);
            tryEnableApply();
            focus();
          }
        });
    quitButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            close();
          }
        });
    applyButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            if (changed()) {
              emacsHomeService.setEmacsParameter(homeTextField.getText());
              emacsSourceService.setEmacsParameter(srcTextField.getText());
              GlobalEnvironment.setEmacsHome(homeTextField.getText());
              GlobalEnvironment.setEmacsSource(srcTextField.getText());
              wasHome = homeTextField.getText();
              wasSrc = srcTextField.getText();
              applyButton.setEnabled(false);
              myProjectComponent.reset();
              EnvironmentInitializer.reset();
              close();
              if (isHomeValid && isSourceValid)
                new Task.Backgroundable(myProject, Emacs4ijBundle.message("init.task"), false) {
                  public void run(@NotNull ProgressIndicator indicator) {
                    indicator.setText(Emacs4ijBundle.message("init.indicator.text"));
                    indicator.setFraction(0.0);
                    if (EnvironmentInitializer.initGlobal()) {
                      myProjectComponent.initEnv();
                    }
                    indicator.setFraction(1.0);
                  }
                }.queue();
            }
          }
        });
  }