Flex IDE: move SDK chooser to Dependencies page, fix bugs

This commit is contained in:
Kirill.Safonov
2011-08-24 21:32:12 +04:00
parent 75fe1800c3
commit a435b422cb
4 changed files with 51 additions and 20 deletions
@@ -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();
@@ -43,15 +43,19 @@ public class JdkConfigurable extends ProjectStructureElementConfigurable<Sdk> 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;
@@ -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()]);
@@ -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<AnAction> createAddActions(final Computable<Object> selectedObjectRetriever, final Runnable treeNodeNameUpdater) {
public Collection<AnAction> createAddActions(final Computable<Object> selectedObjectRetriever,
final Runnable treeNodeNameUpdater,
ModulesConfigurator modulesConfigurator) {
return Collections.emptyList();
}