Fix NPE when opening new layout file.

When adding the parsing of the device XML files, I mostly tested with a
layout file already opened when Eclipse launched.

Well it turns out there's a slightly different code path when opening a file
*after* Eclipse has launched. The load of the device UI in the config
selected caused a rendering before the XML model was loaded which ended
up in an NPE in the recomputeLayout method.

Additionnally, I hadn't finalized the code for the GLE2, so this brings it
in line with the GLE1.

Change-Id: Ic86de6e91ca13793aceecb5706bc963edddb9241
This commit is contained in:
Xavier Ducrohet
2009-09-28 17:53:47 -07:00
parent 9e4715e6d9
commit 596f3b8d91
5 changed files with 17 additions and 12 deletions

View File

@@ -679,6 +679,8 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
// enable the create button if the current and edited config are not equals
mConfigComposite.setEnabledCreate(
mEditedConfig.equals(mConfigComposite.getCurrentConfig()) == false);
reloadConfigurationUi(false /*notifyListener*/);
}
public Clipboard getClipboard() {
@@ -967,7 +969,7 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
}
}
public void reloadConfigurationUi() {
public void reloadConfigurationUi(boolean notifyListener) {
// enable the clipping button if it's supported.
Sdk currentSdk = Sdk.getCurrent();
if (currentSdk != null) {
@@ -975,7 +977,7 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
AndroidTargetData data = currentSdk.getTargetData(target);
if (data != null) {
LayoutBridge bridge = data.getLayoutBridge();
mConfigComposite.reloadDevices();
mConfigComposite.reloadDevices(notifyListener);
mConfigComposite.setClippingSupport(bridge.apiLevel >= 4);
}
}

View File

@@ -548,7 +548,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
mConfigComposite.setEnabledCreate(
mEditedConfig.equals(mConfigComposite.getCurrentConfig()) == false);
reloadConfigurationUi();
reloadConfigurationUi(false /*notifyListener*/);
}
public Rectangle getBounds() {
@@ -730,7 +730,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
PaletteFactory.createPaletteRoot(mPaletteRoot, mLayoutEditor.getTargetData());
}
public void reloadConfigurationUi() {
public void reloadConfigurationUi(boolean notifyListener) {
// enable the clipping button if it's supported.
Sdk currentSdk = Sdk.getCurrent();
if (currentSdk != null) {
@@ -738,7 +738,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
AndroidTargetData data = currentSdk.getTargetData(target);
if (data != null) {
LayoutBridge bridge = data.getLayoutBridge();
mConfigComposite.reloadDevices();
mConfigComposite.reloadDevices(notifyListener);
mConfigComposite.setClippingSupport(bridge.apiLevel >= 4);
}
}

View File

@@ -82,6 +82,6 @@ import org.eclipse.ui.IEditorPart;
abstract Clipboard getClipboard();
abstract void reloadConfigurationUi();
abstract void reloadConfigurationUi(boolean notifyListener);
}

View File

@@ -410,7 +410,7 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa
if (mGraphicalEditor != null) {
mGraphicalEditor.reloadEditor();
mGraphicalEditor.reloadPalette();
mGraphicalEditor.reloadConfigurationUi();
mGraphicalEditor.reloadConfigurationUi(true /*notify listener */);
mGraphicalEditor.recomputeLayout();
}
}

View File

@@ -150,7 +150,7 @@ public class ConfigurationComposite extends Composite {
mDeviceList.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
onDeviceChange();
onDeviceChange(true /* recomputeLayout*/);
}
});
@@ -451,11 +451,12 @@ public class ConfigurationComposite extends Composite {
/**
* Reloads the list of {@link DeviceConfiguration} from the {@link Sdk}.
* @param notifyListener
*/
public void reloadDevices() {
public void reloadDevices(boolean notifyListener) {
mDevices = Sdk.getCurrent().getLayoutDevices();
initUiWithDevices();
onDeviceChange();
onDeviceChange(notifyListener);
}
/**
@@ -508,7 +509,7 @@ public class ConfigurationComposite extends Composite {
}
}
private void onDeviceChange() {
private void onDeviceChange(boolean recomputeLayout) {
int deviceIndex = mDeviceList.getSelectionIndex();
DeviceConfiguration device = mDevices.get(deviceIndex);
@@ -525,7 +526,9 @@ public class ConfigurationComposite extends Composite {
mDeviceConfigs.setEnabled(false);
}
onDeviceConfigChange();
if (recomputeLayout) {
onDeviceConfigChange();
}
}
private void onDeviceConfigChange() {