IDEA-89821 fix "is modified" status updating

This commit is contained in:
Eugene Kudelevsky
2012-08-07 18:25:07 +04:00
parent 1f5f3abb90
commit 98f74685ea
2 changed files with 25 additions and 13 deletions
@@ -18,6 +18,7 @@ package org.jetbrains.android.sdk;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.projectRoots.*;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -77,7 +78,10 @@ public class AndroidSdkConfigurable implements AdditionalDataConfigurable {
public boolean isModified() {
final AndroidSdkAdditionalData data = (AndroidSdkAdditionalData)mySdk.getSdkAdditionalData();
Sdk javaSdk = data != null ? data.getJavaSdk() : null;
return javaSdk != myForm.getSelectedSdk();
final String javaSdkHomePath = javaSdk != null ? javaSdk.getHomePath() : null;
final Sdk selectedSdk = myForm.getSelectedSdk();
final String selectedSdkHomePath = selectedSdk != null ? selectedSdk.getHomePath() : null;
return !FileUtil.pathsEqual(javaSdkHomePath, selectedSdkHomePath);
}
@Override
@@ -49,6 +49,8 @@ class AndroidSdkConfigurableForm {
private final DefaultComboBoxModel myBuildTargetsModel = new DefaultComboBoxModel();
private String mySdkLocation;
private boolean myFreeze = false;
public AndroidSdkConfigurableForm(@NotNull SdkModel sdkModel, @NotNull final SdkModificator sdkModificator) {
mySdkModel = sdkModel;
myInternalJdkComboBox.setModel(myJdksModel);
@@ -76,6 +78,9 @@ class AndroidSdkConfigurableForm {
myBuildTargetComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent e) {
if (myFreeze) {
return;
}
final IAndroidTarget target = (IAndroidTarget)e.getItem();
List<OrderRoot> roots = AndroidSdkUtils.getLibraryRootsForTarget(target, mySdkLocation);
@@ -138,18 +143,10 @@ class AndroidSdkConfigurableForm {
mySdkLocation = androidSdk != null ? androidSdk.getHomePath() : null;
AndroidSdkData androidSdkData = mySdkLocation != null ? AndroidSdkData.parse(mySdkLocation, new EmptySdkLog()) : null;
updateBuildTargets(androidSdkData);
if (buildTarget != null) {
for (int i = 0; i < myBuildTargetsModel.getSize(); i++) {
IAndroidTarget target = (IAndroidTarget)myBuildTargetsModel.getElementAt(i);
if (buildTarget.hashString().equals(target.hashString())) {
myBuildTargetComboBox.setSelectedIndex(i);
return;
}
}
}
myBuildTargetComboBox.setSelectedItem(null);
myFreeze = true;
updateBuildTargets(androidSdkData, buildTarget);
myFreeze = false;
}
private void updateJdks() {
@@ -161,7 +158,7 @@ class AndroidSdkConfigurableForm {
}
}
private void updateBuildTargets(AndroidSdkData androidSdkData) {
private void updateBuildTargets(AndroidSdkData androidSdkData, IAndroidTarget buildTarget) {
myBuildTargetsModel.removeAllElements();
if (androidSdkData != null) {
@@ -169,6 +166,17 @@ class AndroidSdkConfigurableForm {
myBuildTargetsModel.addElement(target);
}
}
if (buildTarget != null) {
for (int i = 0; i < myBuildTargetsModel.getSize(); i++) {
IAndroidTarget target = (IAndroidTarget)myBuildTargetsModel.getElementAt(i);
if (buildTarget.hashString().equals(target.hashString())) {
myBuildTargetComboBox.setSelectedIndex(i);
return;
}
}
}
myBuildTargetComboBox.setSelectedItem(null);
}
public void addJavaSdk(Sdk sdk) {