diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/HeaderHidingTabbedModuleEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/HeaderHidingTabbedModuleEditor.java new file mode 100644 index 000000000000..15e699986383 --- /dev/null +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/HeaderHidingTabbedModuleEditor.java @@ -0,0 +1,95 @@ +package com.intellij.openapi.roots.ui.configuration; + +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleConfigurationEditor; +import com.intellij.openapi.project.Project; +import com.intellij.ui.navigation.Place; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; + +/** + * @author ksafonov + */ +public abstract class HeaderHidingTabbedModuleEditor extends TabbedModuleEditor { + + public HeaderHidingTabbedModuleEditor(Project project, ModulesProvider modulesProvider, @NotNull Module module) { + super(project, modulesProvider, module); + } + + @Override + protected JComponent createCenterPanel() { + ModuleConfigurationEditor singleEditor = getSingleEditor(); + if (singleEditor != null) { + final JComponent component = singleEditor.createComponent(); + singleEditor.reset(); + return component; + } + else { + return super.createCenterPanel(); + } + } + + @Nullable + private ModuleConfigurationEditor getSingleEditor() { + return myEditors.size() == 1 ? myEditors.get(0) : null; + } + + @Override + public ModuleConfigurationEditor getSelectedEditor() { + ModuleConfigurationEditor singleEditor = getSingleEditor(); + return singleEditor != null ? singleEditor : super.getSelectedEditor(); + } + + @Override + public void selectEditor(String displayName) { + if (displayName != null) { + ModuleConfigurationEditor singleEditor = getSingleEditor(); + if (singleEditor != null) { + assert singleEditor.getDisplayName().equals(displayName); + } + else { + super.selectEditor(displayName); + } + } + } + + @Override + protected void restoreSelectedEditor() { + ModuleConfigurationEditor singleEditor = getSingleEditor(); + if (singleEditor == null) { + super.restoreSelectedEditor(); + } + } + + @Override + public ModuleConfigurationEditor getEditor(@NotNull String displayName) { + ModuleConfigurationEditor singleEditor = getSingleEditor(); + if (singleEditor != null) { + assert singleEditor.getDisplayName().equals(displayName); + return singleEditor; + } + else { + return super.getEditor(displayName); + } + } + + @Override + protected void disposeCenterPanel() { + if (getSingleEditor() == null) { + super.disposeCenterPanel(); + } + } + + @Override + public void queryPlace(@NotNull Place place) { + ModuleConfigurationEditor singleEditor = getSingleEditor(); + if (singleEditor != null) { + place.putPath(SELECTED_EDITOR_NAME, singleEditor.getDisplayName()); + } + else { + super.queryPlace(place); + } + } +} diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java index d0015ab19564..83b98d2cf4b5 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java @@ -62,6 +62,7 @@ import java.util.List; @SuppressWarnings({"AssignmentToStaticFieldFromInstanceMethod"}) public abstract class ModuleEditor implements Place.Navigator, Disposable { private static final ExtensionPointName MODULE_CONFIGURABLES = ExtensionPointName.create("com.intellij.moduleConfigurable"); + public static final String SELECTED_EDITOR_NAME = "selectedEditor"; private final Project myProject; private JPanel myGenericSettingsPanel; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java index a9f18171e622..dc741b1c4fa4 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java @@ -162,7 +162,7 @@ public class ModulesConfigurator implements ModulesProvider, ModuleEditor.Change } private ModuleEditor doCreateModuleEditor(final Module module) { - final ModuleEditor moduleEditor = new TabbedModuleEditor(myProject, this, module) { + final ModuleEditor moduleEditor = new HeaderHidingTabbedModuleEditor(myProject, this, module) { @Override public ProjectFacetsConfigurator getFacetsConfigurator() { return myFacetsConfigurator; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java index 590a8ade540c..2337e3f6d805 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java @@ -375,7 +375,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se if (moduleToSelect != null) { final Module module = ModuleManager.getInstance(myProject).findModuleByName(moduleToSelect); assert module != null; - place = place.putPath(ModuleStructureConfigurable.TREE_OBJECT, module).putPath(TabbedModuleEditor.EDITOR_NAME, editorNameToSelect); + place = place.putPath(ModuleStructureConfigurable.TREE_OBJECT, module).putPath(ModuleEditor.SELECTED_EDITOR_NAME, editorNameToSelect); } return navigateTo(place, requestFocus); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/TabbedModuleEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/TabbedModuleEditor.java index 6e98074fd98e..701dbd599fc2 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/TabbedModuleEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/TabbedModuleEditor.java @@ -18,7 +18,6 @@ import javax.swing.event.ChangeEvent; */ public abstract class TabbedModuleEditor extends ModuleEditor { - public static final String EDITOR_NAME = "selectedEditor"; private static final String SELECTED_EDITOR_KEY = TabbedModuleEditor.class.getName() + ".selectedEditor"; private TabbedPaneWrapper myTabbedPane; @@ -66,13 +65,13 @@ public abstract class TabbedModuleEditor extends ModuleEditor { public ActionCallback navigateTo(@Nullable final Place place, final boolean requestFocus) { if (place != null) { - myTabbedPane.setSelectedTitle((String)place.getPath(EDITOR_NAME)); + selectEditor((String)place.getPath(SELECTED_EDITOR_NAME)); } return new ActionCallback.Done(); } public void queryPlace(@NotNull final Place place) { - place.putPath(EDITOR_NAME, getSavedSelectedEditor()); + place.putPath(SELECTED_EDITOR_NAME, getSavedSelectedEditor()); } @Nullable