From 60fff0ec61a493bd7fbd89db754779deefd5844c Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 7 Oct 2011 12:17:19 +0400 Subject: [PATCH] 'create library from files' action: speed search added and fixed creating module library --- .../actions/CreateLibraryFromFilesDialog.java | 55 ++++++------------- .../actions/MarkLibraryRootAction.java | 3 +- .../ui/configuration/ModulesCombobox.java | 11 ++++ 3 files changed, 31 insertions(+), 38 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/projectView/actions/CreateLibraryFromFilesDialog.java b/java/idea-ui/src/com/intellij/ide/projectView/actions/CreateLibraryFromFilesDialog.java index 9dd84f5eaa9f..baabc334ff03 100644 --- a/java/idea-ui/src/com/intellij/ide/projectView/actions/CreateLibraryFromFilesDialog.java +++ b/java/idea-ui/src/com/intellij/ide/projectView/actions/CreateLibraryFromFilesDialog.java @@ -41,6 +41,7 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Arrays; import java.util.List; /** @@ -51,10 +52,8 @@ public class CreateLibraryFromFilesDialog extends DialogWrapper { private final ModulesCombobox myModulesCombobox; private final Project myProject; private final List myRoots; - private JPanel myPanel; - private final LibrariesContainer myLibrariesContainer; + private final JPanel myPanel; private final String myDefaultName; - @Nullable private final ModifiableRootModel myModifiableModel; public CreateLibraryFromFilesDialog(@NotNull Project project, @NotNull List roots) { super(project, true); @@ -62,21 +61,12 @@ public class CreateLibraryFromFilesDialog extends DialogWrapper { myProject = project; myRoots = roots; final FormBuilder builder = LibraryNameAndLevelPanel.createFormBuilder(); - Module module = findModule(roots); - if (module != null) { - myModifiableModel = ModuleRootManager.getInstance(module).getModifiableModel(); - myLibrariesContainer = LibrariesContainerFactory.createContainer(myModifiableModel); - } - else { - myModifiableModel = null; - myLibrariesContainer = LibrariesContainerFactory.createContainer(project); - } - myDefaultName = myLibrariesContainer.suggestUniqueLibraryName(LibraryEditingUtil.suggestLibraryName(roots)); - myNameAndLevelPanel = new LibraryNameAndLevelPanel(builder, myDefaultName, myLibrariesContainer.getAvailableLevels(), LibrariesContainer.LibraryLevel.PROJECT); + myDefaultName = LibrariesContainerFactory.createContainer(project).suggestUniqueLibraryName(LibraryEditingUtil.suggestLibraryName(roots)); + myNameAndLevelPanel = new LibraryNameAndLevelPanel(builder, myDefaultName, Arrays.asList(LibrariesContainer.LibraryLevel.values()), LibrariesContainer.LibraryLevel.PROJECT); myNameAndLevelPanel.setDefaultName(myDefaultName); myModulesCombobox = new ModulesCombobox(); myModulesCombobox.fillModules(myProject); - myModulesCombobox.setSelectedModule(module); + myModulesCombobox.setSelectedModule(findModule(roots)); builder.addLabeledComponent("&Add to module:", myModulesCombobox); myPanel = builder.getPanel(); myNameAndLevelPanel.getLibraryNameField().selectAll(); @@ -141,21 +131,20 @@ public class CreateLibraryFromFilesDialog extends DialogWrapper { final LibrariesContainer.LibraryLevel level = myNameAndLevelPanel.getLibraryLevel(); AccessToken token = WriteAction.start(); try { - final Library library = myLibrariesContainer.createLibrary(myNameAndLevelPanel.getLibraryName(), - level, myRoots); - if (myModifiableModel != null) { - if (level == LibrariesContainer.LibraryLevel.MODULE) { - myModifiableModel.commit(); - } - else { - myModifiableModel.dispose(); - } - } final Module module = myModulesCombobox.getSelectedModule(); - if (module != null && level != LibrariesContainer.LibraryLevel.MODULE) { - final ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel(); - model.addLibraryEntry(library); - model.commit(); + final String libraryName = myNameAndLevelPanel.getLibraryName(); + if (level == LibrariesContainer.LibraryLevel.MODULE) { + final ModifiableRootModel modifiableModel = ModuleRootManager.getInstance(module).getModifiableModel(); + LibrariesContainerFactory.createContainer(modifiableModel).createLibrary(libraryName, level, myRoots); + modifiableModel.commit(); + } + else { + final Library library = LibrariesContainerFactory.createContainer(myProject).createLibrary(libraryName, level, myRoots); + if (module != null) { + final ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel(); + model.addLibraryEntry(library); + model.commit(); + } } } finally { @@ -164,14 +153,6 @@ public class CreateLibraryFromFilesDialog extends DialogWrapper { super.doOKAction(); } - @Override - public void doCancelAction() { - if (myModifiableModel != null) { - myModifiableModel.dispose(); - } - super.doCancelAction(); - } - @Override protected JComponent createCenterPanel() { return myPanel; diff --git a/java/idea-ui/src/com/intellij/ide/projectView/actions/MarkLibraryRootAction.java b/java/idea-ui/src/com/intellij/ide/projectView/actions/MarkLibraryRootAction.java index 2b06a222d18f..e4af24824359 100644 --- a/java/idea-ui/src/com/intellij/ide/projectView/actions/MarkLibraryRootAction.java +++ b/java/idea-ui/src/com/intellij/ide/projectView/actions/MarkLibraryRootAction.java @@ -18,6 +18,7 @@ package com.intellij.ide.projectView.actions; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; @@ -73,7 +74,7 @@ public class MarkLibraryRootAction extends AnAction { public void update(AnActionEvent e) { final Project project = getEventProject(e); boolean visible = false; - if (project != null) { + if (project != null && ModuleManager.getInstance(project).getModules().length > 0) { final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); for (VirtualFile root : getRoots(e)) { if (!root.isInLocalFileSystem() && !fileIndex.isInLibraryClasses(root)) { diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ModulesCombobox.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ModulesCombobox.java index 36d6b70a1840..ea28984c6757 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ModulesCombobox.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ModulesCombobox.java @@ -21,6 +21,7 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; +import com.intellij.ui.ComboboxSpeedSearch; import com.intellij.ui.SortedComboBoxModel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -41,6 +42,16 @@ public class ModulesCombobox extends ComboBox { private ModulesCombobox(final SortedComboBoxModel model) { super(model); myModel = model; + new ComboboxSpeedSearch(this){ + protected String getElementText(Object element) { + if (element instanceof Module) { + return ((Module)element).getName(); + } else if (element == null) { + return ""; + } + return super.getElementText(element); + } + }; setRenderer(new ListCellRendererWrapper(this) { @Override public void customize(JList list, Module value, int index, boolean selected, boolean hasFocus) {