From 4cecd6c03dc4fb22abfdeef73456820e4d7f47b6 Mon Sep 17 00:00:00 2001 From: Ted Williams Date: Wed, 31 Oct 2007 16:42:17 +0000 Subject: [PATCH] [208278] endian cleanup --- .../renderings/traditional/DataPane.java | 4 +- .../renderings/traditional/Rendering.java | 57 ++++++++++++------- .../renderings/traditional/TextPane.java | 4 +- .../traditional/TraditionalRendering.java | 20 ++++--- 4 files changed, 51 insertions(+), 34 deletions(-) diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/DataPane.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/DataPane.java index b46b48a41e4..d9393056100 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/DataPane.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/DataPane.java @@ -30,7 +30,7 @@ public class DataPane extends AbstractPane protected String getCellText(MemoryByte bytes[]) { return fRendering.getRadixText(bytes, fRendering.getRadix(), fRendering - .isLittleEndian()); + .isTargetLittleEndian()); } protected void editCell(BigInteger address, int subCellPosition, @@ -75,7 +75,7 @@ public class DataPane extends AbstractPane if(isSigned) byteData[byteLen - 1] |= 128; - if(fRendering.isLittleEndian() != bytes[0].isBigEndian()) + if(fRendering.isTargetLittleEndian() != bytes[0].isBigEndian()) { byte[] byteDataSwapped = new byte[byteData.length]; for(int i = 0; i < byteData.length; i++) diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/Rendering.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/Rendering.java index c33c317e92d..73ab1c056bc 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/Rendering.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/Rendering.java @@ -103,9 +103,9 @@ public class Rendering extends Composite implements IDebugEventSetListener private int fColumnsSetting = COLUMNS_AUTO_SIZE_TO_FIT; - private boolean fLittleEndian = false; + private boolean fIsTargetLittleEndian = false; - private boolean fCheckedLittleEndian = false; + private boolean fIsDisplayLittleEndian = false; // constants used to identify radix protected final static int RADIX_HEX = 1; @@ -765,18 +765,10 @@ public class Rendering extends Composite implements IDebugEventSetListener for(int i = 0; i < readBytes.length; i++) cachedBytes[i] = new MemoryByte(readBytes[i].getValue(), readBytes[i].getFlags()); - // we need to set the default endianess. before it was set to BE - // by default which wasn't very useful for LE targets. now we will - // query the first byte to get the endianess. if not known then we'll - // leave it as BE. note that we only do this when reading the first - // bit of memory for this rendering. what happens when scrolling - // through memory and it changes endianess? for now we just leave - // it in the original endianess. - if (!fCheckedLittleEndian && cachedBytes.length > 0) { + // derive the target endian from the read MemoryBytes. + if (cachedBytes.length > 0) { if (cachedBytes[0].isEndianessKnown()) { - fLittleEndian = !cachedBytes[0].isBigEndian(); - fCheckedLittleEndian = true; - fParent.bytesAreLittleEndian(fLittleEndian); + setTargetLittleEndian(!cachedBytes[0].isBigEndian()); } } @@ -1515,21 +1507,43 @@ public class Rendering extends Composite implements IDebugEventSetListener return 1; } - protected boolean isLittleEndian() + protected boolean isTargetLittleEndian() { - return fLittleEndian; + return fIsTargetLittleEndian; } - protected void setLittleEndian(boolean enable) + protected void setTargetLittleEndian(boolean littleEndian) { - if(fLittleEndian == enable) + if(fIsTargetLittleEndian == littleEndian) return; - fLittleEndian = enable; - fireSettingsChanged(); - layoutPanes(); + fParent.setTargetMemoryLittleEndian(littleEndian); + fIsTargetLittleEndian = littleEndian; + Display.getDefault().asyncExec(new Runnable() { + public void run() + { + fireSettingsChanged(); + layoutPanes(); + } + }); } + public boolean isDisplayLittleEndian() + { + return fIsDisplayLittleEndian; + } + + public void setDisplayLittleEndian(boolean littleEndian) + { + if(fIsDisplayLittleEndian = littleEndian) + return; + + fIsDisplayLittleEndian = littleEndian; + + fireSettingsChanged(); + layoutPanes(); + } + protected void setBytesPerColumn(int byteCount) { if(fBytesPerColumn != byteCount) @@ -1627,8 +1641,7 @@ public class Rendering extends Composite implements IDebugEventSetListener // and we want to view in LE then we need to swap. if the bytes // are LE and we want to view BE then we need to swap. boolean needsSwap = false; - boolean bytesAreLittleEndian = !bytes[0].isBigEndian(); - if ((isLittleEndian && !bytesAreLittleEndian) || (!isLittleEndian && bytesAreLittleEndian)) + if ((isDisplayLittleEndian() && !isTargetLittleEndian()) || (!isDisplayLittleEndian() && isTargetLittleEndian())) needsSwap = true; switch(radix) diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TextPane.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TextPane.java index ced26698daa..59caae71841 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TextPane.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TextPane.java @@ -35,7 +35,7 @@ public class TextPane extends AbstractPane protected String getCellText(MemoryByte bytes[]) { return fRendering.formatText(bytes, fRendering - .isLittleEndian(), fRendering.getTextMode()); + .isTargetLittleEndian(), fRendering.getTextMode()); } protected void editCell(BigInteger address, int subCellPosition, @@ -219,7 +219,7 @@ public class TextPane extends AbstractPane final int columns = fRendering.getColumnCount(); - final boolean isLittleEndian = fRendering.isLittleEndian(); + final boolean isLittleEndian = fRendering.isTargetLittleEndian(); gc.setForeground(fRendering.getTraditionalRendering().getColorBackground()); gc.fillRectangle(columns * cellWidth, 0, this.getBounds().width, this diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering.java index d81324ff9c4..5ea13b70c6b 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering.java @@ -722,10 +722,10 @@ public class TraditionalRendering extends AbstractMemoryRendering implements IRe public void run() { TraditionalRendering.this.fRendering - .setLittleEndian(false); + .setDisplayLittleEndian(false); } }; - displayEndianBigAction.setChecked(!this.fRendering.isLittleEndian()); + displayEndianBigAction.setChecked(!this.fRendering.isTargetLittleEndian()); displayEndianLittleAction = new Action( TraditionalRenderingMessages @@ -735,10 +735,10 @@ public class TraditionalRendering extends AbstractMemoryRendering implements IRe public void run() { TraditionalRendering.this.fRendering - .setLittleEndian(true); + .setDisplayLittleEndian(true); } }; - displayEndianLittleAction.setChecked(this.fRendering.isLittleEndian()); + displayEndianLittleAction.setChecked(this.fRendering.isTargetLittleEndian()); // radix @@ -1008,12 +1008,16 @@ public class TraditionalRendering extends AbstractMemoryRendering implements IRe }); } - protected void bytesAreLittleEndian(boolean areLE) + protected void setTargetMemoryLittleEndian(boolean littleEndian) { // once we actually read memory we can determine the // endianess and need to set these actions accordingly. - displayEndianBigAction.setChecked(!areLE); - displayEndianLittleAction.setChecked(areLE); + displayEndianBigAction.setChecked(!littleEndian); + displayEndianLittleAction.setChecked(littleEndian); + + // when target endian changes, force display endian to track. + // user can then change display endian if desired. + fRendering.setDisplayLittleEndian(littleEndian); } public void dispose() @@ -1157,7 +1161,7 @@ class CopyAction extends Action final int radix = fRendering.getRadix(); final int bytesPerColumn = fRendering.getBytesPerColumn(); - final boolean isLittleEndian = fRendering.isLittleEndian(); + final boolean isLittleEndian = fRendering.isTargetLittleEndian(); final int bytesPerCharacter = fRendering.getBytesPerCharacter(); final int addressWidth = fRendering.getAddressString(start)