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(); } } }); }