Implementing editing features of the memory view.
Index:
ChangeLog
===================================================================
RCS
file: /home/tools/org.eclipse.cdt.debug.core/ChangeLog,v
retrieving revision
1.34
diff -u -r1.34 ChangeLog
--- ChangeLog 28 Oct 2002 02:46:38
-0000 1.34
+++ ChangeLog 28 Oct 2002 23:29:43 -0000
@@ -1,3 +1,8
@@
+2002-10-28 Mikhail Khodjaiants
+ Implementing editing features of
the memory view.
+ * IFormattedMemoryBlockRow.java
+ *
CFormattedMemoryBlock.java
+
2002-10-27 Mikhail
Khodjaiants
* IFormattedMemoryBlock.java: added the
'setItemValue' method.
* CFormattedMemoryBlock.java:
implementation of the 'setItemValue' method.
Index:
src/org/eclipse/cdt/debug/core/IFormattedMemoryBlockRow.java
===================================================================
RCS
file:
/home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IFormattedMemoryBlockRow.java,v
retrieving
revision 1.1
diff -u -r1.1 IFormattedMemoryBlockRow.java
---
src/org/eclipse/cdt/debug/core/IFormattedMemoryBlockRow.java 6 Aug 2002
18:56:15 -0000 1.1
+++
src/org/eclipse/cdt/debug/core/IFormattedMemoryBlockRow.java 28 Oct 2002
23:29:43 -0000
@@ -34,4 +34,6 @@
* @return the ASCII dump for
this row
*/
String
getASCII();
+
+ Integer[] getDirtyItems();
}
Index:
src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java
===================================================================
RCS
file:
/home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java,v
retrieving
revision 1.7
diff -u -r1.7 CFormattedMemoryBlock.java
---
src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 28
Oct 2002 02:46:38 -0000 1.7
+++
src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 28
Oct 2002 23:29:44 -0000
@@ -6,7 +6,7 @@
package
org.eclipse.cdt.debug.internal.core.model;
import
java.util.ArrayList;
-import java.util.HashSet;
+import
java.util.Arrays;
import java.util.List;
import
org.eclipse.cdt.debug.core.CDebugCorePlugin;
@@ -38,6 +38,7
@@
private long fAddress;
private
String[] fData;
private String
fAscii;
+ private boolean[]
fDirtyItems;
/**
*
Constructor for CFormattedMemoryBlockRow.
@@ -47,6 +48,8
@@
fAddress =
address;
fData =
data;
fAscii =
ascii;
+ fDirtyItems = new
boolean[fData.length];
+ Arrays.fill( fDirtyItems, false
);
}
/* (non-Javadoc)
@@
-72,6 +75,26 @@
{
return
fData;
}
+
+ protected void setData( int
colIndex, String newValue )
+ {
+ if (
colIndex < fData.length
)
+ {
+ fData[colIndex] =
newValue;
+ fDirtyItems[colIndex] =
true;
+ }
+ }
+
+ public
Integer[] getDirtyItems()
+ {
+ ArrayList list
= new ArrayList( fDirtyItems.length );
+ for ( int i = 0; i
< fDirtyItems.length; ++i
)
+ {
+ if ( fDirtyItems[i]
)
+ list.add( new Integer( i )
);
+ }
+ return (Integer[])list.toArray(
new Integer[list.size()]
);
+ }
}
private String
fAddressExpression;
@@ -84,7 +107,6 @@
private char
fPaddingChar = '.';
private List fRows =
null;
private Long[] fChangedAddresses = new
Long[0];
- private HashSet
fDirtyBytes;
/**
* Constructor for
CFormattedMemoryBlock.
@@ -123,7 +145,6
@@
fNumberOfColumns =
numberOfColumns;
fDisplayAscii =
true;
fPaddingChar =
paddingChar;
- fDirtyBytes = new
HashSet();
getCDISession().getEventManager().addEventListener(
this );
}
@@ -164,7 +185,7 @@
*/
public boolean
displayASCII()
{
- return
fDisplayAscii;
+ return ( getWordSize() ==
IFormattedMemoryBlock.MEMORY_SIZE_BYTE && fDisplayAscii
);
}
/* (non-Javadoc)
@@ -347,8
+368,6 @@
fCDIMemoryBlock =
null;
}
getCDISession().getEventManager().removeEventListener(
this );
- fDirtyBytes.clear();
- fDirtyBytes =
null;
}
/* (non-Javadoc)
@@ -436,7
+455,6 @@
private void handleChangedEvent( ICDIMemoryChangedEvent
event
)
{
resetRows();
- resetDirtyBytes();
setChangedAddresses(
event.getAddresses() );
fireChangeEvent( DebugEvent.CONTENT
);
}
@@ -477,10 +495,15 @@
*/
public void setItemValue( int index, String newValue ) throws
DebugException
{
- }
-
- private void
resetDirtyBytes()
- {
- fDirtyBytes.clear();
+ int
rowIndex = index / getNumberOfColumns();
+ if ( rowIndex <
getRows().length
)
+ {
+ CFormattedMemoryBlockRow row =
(CFormattedMemoryBlockRow)getRows()[rowIndex];
+ int
colIndex = index % getNumberOfColumns();
+ if ( colIndex
< row.getData().length
)
+ {
+ row.setData( colIndex,
newValue
);
+ }
+ }
}
}