@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		if ((viewComposite == null) || (rowIndex >= viewComposite.getNumComponents()) ||
			(rowIndex < 0) || (columnIndex < 0) || (columnIndex >= getColumnCount())) {
			return "";
		}
		StackComponentWrapper element = viewComposite.getComponent(rowIndex);
		DataType dt;
		int dtLen;
		switch (columnIndex) {
			case OFFSET:
				int offset = viewComposite.getComponent(rowIndex).getOffset();
				return showHexNumbers ? getHexString(offset, true) : Integer.toString(offset);
			case LENGTH:
				dt = element.getDataType();
				dtLen = dt.getLength();
				String dtHexLen =
					showHexNumbers ? getHexString(dtLen, true) : Integer.toString(dtLen);
				int compLen = element.getLength();
				String compHexLen =
					showHexNumbers ? getHexString(compLen, true) : Integer.toString(compLen);
				if (dtLen >= 0 && dtLen != compLen) {
					return compHexLen + " (needs " + dtHexLen + ")";
				}
				return compHexLen;
			case DATATYPE:
				dt = element.getDataType();
				dtLen = dt.getLength();
				return DataTypeInstance.getDataTypeInstance(dt,
					(dtLen > 0) ? dtLen : element.getLength(), usesAlignedLengthComponents());
			case NAME:
				String fieldName = getFieldNameAtRow(rowIndex, viewComposite);
				if (fieldName == null) {
					fieldName = "";
				}
				return fieldName;
			case COMMENT:
				return element.getComment();
			default:
				return null;
		}
	}
Function stack editor model for maintaining information about the edits to
a function stack frame. Updates the stack frame with the edit changes.
It also notifies any registered EditorModelListener listeners when
the stack frame is changed in the editor.
<P>This model provides methods for editing the stack and managing how
the changes occur.
When edit actions occur and there is a selection, the listener's are notified
of the new selection via the listener's overrideSelection method.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/stackeditor/StackEditorModel.java