Implementing editing features of the memory view.
Index:
ChangeLog
===================================================================
RCS
file: /home/tools/org.eclipse.cdt.debug.ui/ChangeLog,v
retrieving revision
1.19
diff -u -r1.19 ChangeLog
--- ChangeLog 28 Oct 2002 02:53:58
-0000 1.19
+++ ChangeLog 28 Oct 2002 23:33:03 -0000
@@ -1,3 +1,9
@@
+2002-10-28 Mikhail Khodjaiants
+ Implementing editing features of
the memory view.
+ * MemoryPresentation.java
+ *
MemoryControlArea.java
+ *
MemoryText.java
+
2002-10-27 Mikhail
Khodjaiants
* MemoryPresentation.java: adding editing features to
the memory view.
Index:
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java
===================================================================
RCS
file:
/home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java,v
retrieving
revision 1.9
diff -u -r1.9 MemoryControlArea.java
---
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java 21
Oct 2002 21:49:18 -0000 1.9
+++
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java 28
Oct 2002 23:33:03 -0000
@@ -181,6 +181,7
@@
{
fAddressText.setText( (
getPresentation() != null ) ? getPresentation().getAddressExpression() : ""
);
fMemoryText.refresh();
+ fMemoryView.updateObjects();
}
protected
void setMemoryManager( ICMemoryManager mm )
Index:
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java
===================================================================
RCS
file:
/home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java,v
retrieving
revision 1.7
diff -u -r1.7 MemoryPresentation.java
---
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java 28
Oct 2002 02:53:58 -0000 1.7
+++
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java 28
Oct 2002 23:33:03 -0000
@@ -6,6 +6,7 @@
package
org.eclipse.cdt.debug.internal.ui.views.memory;
+import
java.util.ArrayList;
import java.util.Arrays;
import
java.util.LinkedList;
import java.util.List;
@@ -13,6 +14,7
@@
import org.eclipse.cdt.debug.core.ICMemoryManager;
import
org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
import
org.eclipse.cdt.debug.core.IFormattedMemoryBlockRow;
+import
org.eclipse.cdt.debug.internal.core.CDebugUtils;
import
org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
import
org.eclipse.debug.core.DebugException;
import
org.eclipse.swt.graphics.Point;
@@ -35,7 +37,6
@@
private List
fAddressZones;
private List fChangedZones;
- private List
fDirtyZones;
private boolean fDisplayAscii =
true;
@@ -46,7 +47,6
@@
{
fAddressZones = new
LinkedList();
fChangedZones = new
LinkedList();
- fDirtyZones = new
LinkedList();
}
public
IFormattedMemoryBlock getMemoryBlock()
@@ -123,7 +123,31
@@
public Point[]
getDirtyZones()
{
- return
(Point[])fDirtyZones.toArray( new Point[fDirtyZones.size()]
);
+ ArrayList dirtyZones = new ArrayList();
+ if (
fBlock != null
)
+ {
+ IFormattedMemoryBlockRow[] rows =
fBlock.getRows();
+ for ( int i = 0; i < rows.length; ++i
)
+ {
+ int rowOffset = i *
getRowLength();
+ Integer[] dirtyItems =
rows[i].getDirtyItems();
+ for ( int j = 0; j <
dirtyItems.length; ++j
)
+ {
+ int offset =
rowOffset +
+
getAddressLength() + INTERVAL_BETWEEN_ADDRESS_AND_DATA
+
+ dirtyItems[j].intValue()
* (getDataItemLength() +
INTERVAL_BETWEEN_DATA_ITEMS);
+ dirtyZones.add(
new Point( offset, offset + getDataItemLength() )
);
+ if ( displayASCII()
)
+ {
+ offset
= rowOffset +
+
getAddressLength() + INTERVAL_BETWEEN_ADDRESS_AND_DATA
+
+
getNumberOfDataItemsInRow() * (getDataItemLength() +
INTERVAL_BETWEEN_DATA_ITEMS);
+ dirtyZones.add(
new Point( offset, offset + (getDataItemLength() / 2) )
);
+ }
+ }
+ }
+ }
+ return
(Point[])dirtyZones.toArray( new Point[dirtyZones.size()]
);
}
public String
getStartAddress()
@@ -159,9 +183,9
@@
result.append( items[i]
);
result.append( getInterval(
INTERVAL_BETWEEN_DATA_ITEMS )
);
}
- result.append( getInterval(
INTERVAL_BETWEEN_DATA_AND_ASCII ) );
if ( displayASCII()
)
{
+ result.append( getInterval(
INTERVAL_BETWEEN_DATA_AND_ASCII ) );
result.append(
row.getASCII() );
}
result.append(
'\n' );
@@ -450,20 +474,19 @@
{
if (
getMemoryBlock() != null )
{
- int
index = -1;
- if ( isInDataArea( offset )
)
- {
- index = getDataItemIndex(
offset );
- }
- if ( isInAsciiArea(
offset ) )
- {
- index =
offset;
- }
+ int index =
getDataItemIndex( offset );
if ( index != -1
)
{
char[] chars =
getDataItemChars( index );
- int itemOffset =
getDataItemOffset( index );
- chars[offset -
itemOffset] = newChar;
+ if ( isInDataArea( offset )
)
+ {
+ int charIndex
= getOffsetInDataItem( offset, index
);
+ chars[charIndex] =
newChar;
+ }
+ if (
isInAsciiArea( offset )
)
+ {
+ chars =
CDebugUtils.getByteText( (byte)newChar
);
+ }
try
{
getMemoryBlock().setItemValue(
index, new String( chars ) );
@@ -479,7 +502,7 @@
private int
getDataItemIndex( int offset )
{
int row =
offset / getRowLength();
- int pos = offset %
getRowLength();
+ int pos = offset % getRowLength() -
getAddressLength() - INTERVAL_BETWEEN_ADDRESS_AND_DATA;
for
( int i = 0; i < getNumberOfDataItemsInRow(); ++i
)
{
if ( pos < i *
(getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS) )
@@ -488,13 +511,17
@@
pos < (i * (getDataItemLength() +
INTERVAL_BETWEEN_DATA_ITEMS)) + getDataItemLength()
)
return i + (row *
getNumberOfDataItemsInRow());
}
+ if (
displayASCII() && pos >= getNumberOfDataItemsInRow() *
(getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS) +
INTERVAL_BETWEEN_DATA_AND_ASCII )
+ {
+ return
((pos - ((getNumberOfDataItemsInRow() * (getDataItemLength() +
INTERVAL_BETWEEN_DATA_ITEMS) + INTERVAL_BETWEEN_DATA_AND_ASCII))) * 2 /
getDataItemLength()) + row *
getNumberOfDataItemsInRow();
+ }
return
-1;
}
private int getDataItemOffset( int
index )
{
int row = index /
getNumberOfDataItemsInRow();
- int pos = index %
getDataItemLength();
+ int pos = index %
getNumberOfDataItemsInRow();
return row * getRowLength() +
getAddressLength() +
INTERVAL_BETWEEN_ADDRESS_AND_DATA +
pos
* (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS);
@@ -504,8 +531,8
@@
{
if ( getMemoryBlock() != null
)
{
- int rowNumber = index /
(getMemoryBlock().getNumberOfColumns() *
getMemoryBlock().getWordSize());
- int pos = index %
(getMemoryBlock().getNumberOfColumns() *
getMemoryBlock().getWordSize());
+ int rowNumber = index /
getMemoryBlock().getNumberOfColumns();
+ int pos = index %
getMemoryBlock().getNumberOfColumns();
IFormattedMemoryBlockRow[]
rows = getMemoryBlock().getRows();
if ( rowNumber
< rows.length )
{
@@ -517,5 +544,14
@@
}
}
return
new char[0];
+ }
+
+ private int getOffsetInDataItem(
int offset, int index )
+ {
+ if ( isInDataArea( offset )
)
+ {
+ return offset - getDataItemOffset(
index );
+ }
+ return
-1;
}
}
Index:
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java
===================================================================
RCS
file:
/home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java,v
retrieving
revision 1.7
diff -u -r1.7 MemoryText.java
---
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java 25 Oct
2002 21:58:42 -0000 1.7
+++
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java 28 Oct
2002 23:33:03 -0000
@@ -83,11 +83,12
@@
{
if ( event.length != 1
)
return;
+ int caretOffset =
fText.getCaretOffset();
fPresentation.textChanged(
event.start,
fText.getText().charAt( event.start
),
event.replacedText.toCharArray() );
- Point[] zones =
fPresentation.getDirtyZones();
- refresh( zones,
fPresentation.getText( zones )
);
+ refresh();
+ fText.setCaretOffset( caretOffset
);
}
public void
refresh()