SDK combobox - better API for 'New' and 'Edit' buttons

This commit is contained in:
kirill.safonov
2012-01-30 18:46:59 +04:00
parent 48b5a0e7ee
commit 82f1c26a00
5 changed files with 37 additions and 32 deletions
@@ -18,7 +18,6 @@ package com.intellij.openapi.roots.ui.configuration;
import com.intellij.ide.DataManager;
import com.intellij.ide.util.projectWizard.ProjectJdkListRenderer;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.projectRoots.Sdk;
@@ -48,7 +47,6 @@ import java.util.Comparator;
* @since May 18, 2005
*/
class JdkComboBox extends ComboBoxWithWidePopup {
private final JButton myEditButton = new JButton(ApplicationBundle.message("button.edit"));
public JdkComboBox(@NotNull final ProjectSdksModel jdkModel) {
super(new JdkComboBoxModel(jdkModel));
@@ -101,17 +99,12 @@ class JdkComboBox extends ComboBoxWithWidePopup {
return minSize;
}
public JButton createSetupButton(final Project project, final ProjectSdksModel jdksModel, final JdkComboBoxItem firstItem) {
return createSetupButton(project, jdksModel, firstItem, null, false);
}
public JButton createSetupButton(final Project project,
final ProjectSdksModel jdksModel,
final JdkComboBoxItem firstItem,
@Nullable final Condition<Sdk> additionalSetup,
final boolean moduleJdkSetup) {
final JButton setUpButton = new JButton(ApplicationBundle.message("button.new"));
public void setSetupButton(final JButton setUpButton,
final Project project,
final ProjectSdksModel jdksModel,
final JdkComboBoxItem firstItem,
@Nullable final Condition<Sdk> additionalSetup,
final boolean moduleJdkSetup) {
setUpButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final JdkListConfigurable configurable = JdkListConfigurable.getInstance(project);
@@ -130,15 +123,15 @@ class JdkComboBox extends ComboBoxWithWidePopup {
});
JBPopupFactory.getInstance()
.createActionGroupPopup(ProjectBundle.message("project.roots.set.up.jdk.title", moduleJdkSetup ? 1 : 2), group,
DataManager.getInstance().getDataContext(JdkComboBox.this), JBPopupFactory.ActionSelectionAid.MNEMONICS, false)
DataManager.getInstance().getDataContext(JdkComboBox.this), JBPopupFactory.ActionSelectionAid.MNEMONICS,
false)
.showUnderneathOf(setUpButton);
}
});
return setUpButton;
}
public void appendEditButton(final Project project, final JPanel panel, GridBagConstraints gc, final Computable<Sdk> retrieveJDK){
myEditButton.addActionListener(new ActionListener() {
public void setEditButton(final JButton editButton, final Project project, final Computable<Sdk> retrieveJDK){
editButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final Sdk projectJdk = retrieveJDK.compute();
if (projectJdk != null) {
@@ -146,17 +139,17 @@ class JdkComboBox extends ComboBoxWithWidePopup {
}
}
});
addActionListener(new ActionListener(){
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final JdkComboBoxItem selectedItem = getSelectedItem();
if (selectedItem instanceof ProjectJdkComboBoxItem) {
myEditButton.setEnabled(ProjectStructureConfigurable.getInstance(project).getProjectJdksModel().getProjectSdk() != null);
} else {
myEditButton.setEnabled(!(selectedItem instanceof InvalidJdkComboBoxItem) && selectedItem != null && selectedItem.getJdk() != null);
editButton.setEnabled(ProjectStructureConfigurable.getInstance(project).getProjectJdksModel().getProjectSdk() != null);
}
else {
editButton.setEnabled(!(selectedItem instanceof InvalidJdkComboBoxItem) && selectedItem != null && selectedItem.getJdk() != null);
}
}
});
panel.add(myEditButton, gc);
}
public JdkComboBoxItem getSelectedItem() {
@@ -17,6 +17,7 @@
package com.intellij.openapi.roots.ui.configuration;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
@@ -119,17 +120,18 @@ public abstract class ModuleJdkConfigurable implements Disposable {
GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
new Insets(6, 6, 12, 0), 0, 0));
final Project project = getRootModel().getModule().getProject();
final JButton setUpButton = myCbModuleJdk
.createSetupButton(project, myJdksModel, new JdkComboBox.ProjectJdkComboBoxItem(), new Condition<Sdk>(){
final JButton setUpButton = new JButton(ApplicationBundle.message("button.new"));
myCbModuleJdk
.setSetupButton(setUpButton, project, myJdksModel, new JdkComboBox.ProjectJdkComboBoxItem(), new Condition<Sdk>() {
public boolean value(Sdk jdk) {
final Sdk projectJdk = myJdksModel.getProjectSdk();
if (projectJdk == null){
if (projectJdk == null) {
final int res =
Messages.showYesNoDialog(myJdkPanel,
ProjectBundle.message("project.roots.no.jdk.on.project.message"),
ProjectBundle.message("project.roots.no.jdk.on.projecct.title"),
ProjectBundle.message("project.roots.no.jdk.on.project.title"),
Messages.getInformationIcon());
if (res == DialogWrapper.OK_EXIT_CODE){
if (res == DialogWrapper.OK_EXIT_CODE) {
myJdksModel.setProjectSdk(jdk);
return true;
}
@@ -140,12 +142,16 @@ public abstract class ModuleJdkConfigurable implements Disposable {
myJdkPanel.add(setUpButton, new GridBagConstraints(2, 0, 1, 1, 0, 0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 4, 7, 0), 0, 0));
myCbModuleJdk.appendEditButton(getRootModel().getModule().getProject(), myJdkPanel, new GridBagConstraints(GridBagConstraints.RELATIVE, 0, 1, 1, 1.0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 4, 7, 0), 0, 0) , new Computable<Sdk>() {
final JButton editButton = new JButton(ApplicationBundle.message("button.edit"));
myCbModuleJdk.setEditButton(editButton, getRootModel().getModule().getProject(), new Computable<Sdk>() {
@Nullable
public Sdk compute() {
return getRootModel().getSdk();
}
});
myJdkPanel.add(editButton,
new GridBagConstraints(GridBagConstraints.RELATIVE, 0, 1, 1, 1.0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 4, 7, 0), 0, 0));
}
private void clearCaches() {
@@ -16,6 +16,7 @@
package com.intellij.openapi.roots.ui.configuration;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.UnnamedConfigurable;
import com.intellij.openapi.project.Project;
@@ -90,14 +91,19 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable {
});
myJdkPanel.add(new JLabel(ProjectBundle.message("module.libraries.target.jdk.project.radio")), new GridBagConstraints(0, 0, 3, 1, 0, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 0, 4, 0), 0, 0));
myJdkPanel.add(myCbProjectJdk, new GridBagConstraints(0, 1, 1, 1, 0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 4, 0, 0), 0, 0));
final JButton setUpButton = myCbProjectJdk.createSetupButton(myProject, myJdksModel, new JdkComboBox.NoneJdkComboBoxItem());
final JButton setUpButton = new JButton(ApplicationBundle.message("button.new"));
myCbProjectJdk.setSetupButton(setUpButton, myProject, myJdksModel, new JdkComboBox.NoneJdkComboBoxItem(), null, false);
myJdkPanel.add(setUpButton, new GridBagConstraints(1, 1, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 4, 0, 0), 0, 0));
myCbProjectJdk.appendEditButton(myProject, myJdkPanel, new GridBagConstraints(GridBagConstraints.RELATIVE, 1, 1, 1, 1.0, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 4, 0, 0), 0, 0), new Computable<Sdk>() {
final JButton editButton = new JButton(ApplicationBundle.message("button.edit"));
myCbProjectJdk.setEditButton(editButton, myProject, new Computable<Sdk>() {
@Nullable
public Sdk compute() {
return myJdksModel.getProjectSdk();
}
});
myJdkPanel.add(editButton, new GridBagConstraints(GridBagConstraints.RELATIVE, 1, 1, 1, 1.0, 0, GridBagConstraints.NORTHWEST,
GridBagConstraints.NONE, new Insets(0, 4, 0, 0), 0, 0));
}
return myJdkPanel;
}