From a435b422cb5ac1d4bf7b3a238b0fd17496b4696c Mon Sep 17 00:00:00 2001 From: "Kirill.Safonov" Date: Wed, 24 Aug 2011 21:30:04 +0400 Subject: [PATCH] Flex IDE: move SDK chooser to Dependencies page, fix bugs --- .../openapi/projectRoots/ui/SdkEditor.java | 20 +++++++++---- .../projectRoot/JdkConfigurable.java | 8 ++++-- .../ModuleStructureConfigurable.java | 28 ++++++++++++------- .../projectRoot/ModuleStructureExtension.java | 15 ++++++++-- 4 files changed, 51 insertions(+), 20 deletions(-) diff --git a/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/SdkEditor.java b/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/SdkEditor.java index a6718c1224b0..d1c7ed1c22ac 100644 --- a/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/SdkEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/SdkEditor.java @@ -130,7 +130,7 @@ public class SdkEditor implements Configurable, Place.Navigator { myTabbedPane = new TabbedPaneWrapper(myDisposable); for (OrderRootType type : OrderRootType.getAllTypes()) { - if (mySdk == null || mySdk.getSdkType().isRootTypeApplicable(type)) { + if (mySdk == null || showTabForType(type)) { final PathEditor pathEditor = OrderRootTypeUIFactory.FACTORY.getByKey(type).createPathEditor(mySdk); if (pathEditor != null) { myTabbedPane.addTab(pathEditor.getDisplayName(), pathEditor.createComponent()); @@ -145,11 +145,7 @@ public class SdkEditor implements Configurable, Place.Navigator { } }); - myHomeComponent = new TextFieldWithBrowseButton(new ActionListener(){ - public void actionPerformed(ActionEvent e){ - doSelectHomePath(); - } - }); + myHomeComponent = createHomeComponent(); myHomeComponent.getTextField().setEditable(false); myHomeFieldLabel = new JLabel(getHomeFieldLabelValue()); @@ -162,6 +158,18 @@ public class SdkEditor implements Configurable, Place.Navigator { myMainPanel.add(myTabbedPane.getComponent(), new GridBagConstraints(0, GridBagConstraints.RELATIVE, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2, 0, 0, 0), 0, 0)); } + protected TextFieldWithBrowseButton createHomeComponent() { + return new TextFieldWithBrowseButton(new ActionListener() { + public void actionPerformed(ActionEvent e) { + doSelectHomePath(); + } + }); + } + + protected boolean showTabForType(OrderRootType type) { + return mySdk.getSdkType().isRootTypeApplicable(type); + } + private String getHomeFieldLabelValue() { if (mySdk != null) { return mySdk.getSdkType().getHomeFieldLabel(); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkConfigurable.java index 4dff05b64ce9..092a8be9c07d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkConfigurable.java @@ -43,15 +43,19 @@ public class JdkConfigurable extends ProjectStructureElementConfigurable im private final SdkProjectStructureElement myProjectStructureElement; public JdkConfigurable(final ProjectJdkImpl projectJdk, - final ProjectSdksModel configurable, + final ProjectSdksModel sdksModel, final Runnable updateTree, @NotNull History history, Project project) { super(true, updateTree); myProjectJdk = projectJdk; - mySdkEditor = new SdkEditor(configurable, history, myProjectJdk); + mySdkEditor = createSdkEditor(sdksModel, history, myProjectJdk); final StructureConfigurableContext context = ModuleStructureConfigurable.getInstance(project).getContext(); myProjectStructureElement = new SdkProjectStructureElement(context, myProjectJdk); } + protected SdkEditor createSdkEditor(ProjectSdksModel sdksModel, History history, ProjectJdkImpl projectJdk) { + return new SdkEditor(sdksModel, history, projectJdk); + } + @Override public ProjectStructureElement getProjectStructureElement() { return myProjectStructureElement; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java index 4b694053e919..ed0089cfbf7e 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java @@ -215,7 +215,7 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple ModuleConfigurable configurable = new ModuleConfigurable(myContext.myModulesConfigurator, module, TREE_UPDATER); final MyNode moduleNode = new MyNode(configurable); boolean nodesAdded = myFacetEditorFacade.addFacetsNodes(module, moduleNode); - nodesAdded |= addNodesFromExtensions(module, moduleNode); + nodesAdded |= addNodesFromExtensions(module, moduleNode, myContext.myModulesConfigurator.getModuleEditor(module).getModifiableRootModel()); if (nodesAdded) { myTree.setShowsRootHandles(true); } @@ -251,10 +251,10 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple //myProjectNode.add(myLevel2Nodes.get(LibraryTablesRegistrar.PROJECT_LEVEL)); } - private boolean addNodesFromExtensions(final Module module, final MyNode moduleNode) { + private boolean addNodesFromExtensions(final Module module, final MyNode moduleNode, ModifiableRootModel modifiableRootModel) { boolean nodesAdded= false; for (final ModuleStructureExtension extension : ModuleStructureExtension.EP_NAME.getExtensions()) { - nodesAdded |= extension.addModuleNodeChildren(module, moduleNode, TREE_UPDATER); + nodesAdded |= extension.addModuleNodeChildren(module, moduleNode, modifiableRootModel, TREE_UPDATER); } return nodesAdded; } @@ -294,8 +294,9 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple }); addNode(moduleNode, moduleGroupNode); } - myFacetEditorFacade.addFacetsNodes((Module)moduleNode.getConfigurable().getEditableObject(), moduleNode); - addNodesFromExtensions((Module)moduleNode.getConfigurable().getEditableObject(), moduleNode); + Module module = (Module)moduleNode.getConfigurable().getEditableObject(); + myFacetEditorFacade.addFacetsNodes(module, moduleNode); + addNodesFromExtensions(module, moduleNode, myContext.myModulesConfigurator.getModuleEditor(module).getModifiableRootModel()); } ((DefaultTreeModel)myTree.getModel()).reload(myRoot); return true; @@ -343,10 +344,17 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple roots.add(myRoot); checkApply(roots, ProjectBundle.message("rename.message.prefix.module"), ProjectBundle.message("rename.module.title")); - if (myContext.myModulesConfigurator.isModified()) myContext.myModulesConfigurator.apply(); - + // extensions should be applied first, since some can write to modifiable model that is committed later by myModulesConfigurator.apply() + boolean isModulesConfiguratorModifiedByExtension = false; for (final ModuleStructureExtension extension : ModuleStructureExtension.EP_NAME.getExtensions()) { - extension.apply(); + if (extension.isModified()) { + isModulesConfiguratorModifiedByExtension |= extension.isModulesConfiguratorModified(); + extension.apply(); + } + } + + if (isModulesConfiguratorModifiedByExtension || myContext.myModulesConfigurator.isModified()) { + myContext.myModulesConfigurator.apply(); } } @@ -521,7 +529,7 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple if (parent == null) parent = myRoot; addNode(node, parent); myFacetEditorFacade.addFacetsNodes(module, node); - addNodesFromExtensions(module, node); + addNodesFromExtensions(module, node, myContext.myModulesConfigurator.getModuleEditor(module).getModifiableRootModel()); ((DefaultTreeModel)myTree.getModel()).reload(parent); selectNodeInTree(node); final ProjectStructureDaemonAnalyzer daemonAnalyzer = myContext.getDaemonAnalyzer(); @@ -730,7 +738,7 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple } }; for (final ModuleStructureExtension extension : ModuleStructureExtension.EP_NAME.getExtensions()) { - result.addAll(extension.createAddActions(selectedObjectRetriever, TREE_UPDATER)); + result.addAll(extension.createAddActions(selectedObjectRetriever, TREE_UPDATER, myContext.myModulesConfigurator)); } return result.toArray(new AnAction[result.size()]); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureExtension.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureExtension.java index c4dc15da4b9b..a60b0ee0e369 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureExtension.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureExtension.java @@ -4,6 +4,8 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator; import com.intellij.openapi.ui.MasterDetailsComponent; import com.intellij.openapi.ui.NamedConfigurable; import com.intellij.openapi.util.Computable; @@ -19,7 +21,10 @@ public abstract class ModuleStructureExtension { public void reset() { } - public boolean addModuleNodeChildren(Module module, MasterDetailsComponent.MyNode moduleNode, Runnable treeNodeNameUpdater) { + public boolean addModuleNodeChildren(Module module, + MasterDetailsComponent.MyNode moduleNode, + ModifiableRootModel modifiableRootModel, + Runnable treeNodeNameUpdater) { return false; } @@ -29,6 +34,10 @@ public abstract class ModuleStructureExtension { public void moduleRemoved(final Module module) { } + public boolean isModulesConfiguratorModified() { + return false; + } + public boolean isModified() { return false; } @@ -47,7 +56,9 @@ public abstract class ModuleStructureExtension { return false; } - public Collection createAddActions(final Computable selectedObjectRetriever, final Runnable treeNodeNameUpdater) { + public Collection createAddActions(final Computable selectedObjectRetriever, + final Runnable treeNodeNameUpdater, + ModulesConfigurator modulesConfigurator) { return Collections.emptyList(); }