@Override
	public void dataChanged(BigInteger start, BigInteger end) {
		if (layouts.isEmpty()) {
			notifyScrollListenerDataChanged(start, end);
			return;
		}
		Point cursorPoint = getCursorPoint();
		BigInteger firstDisplayedIndex = layouts.get(0).getIndex();
		BigInteger lastDisplayedIndex = layouts.get(layouts.size() - 1).getIndex();

		if (end.compareTo(firstDisplayedIndex) < 0) { // changes are all before currently displayed
			return;
		}
		if (start.compareTo(lastDisplayedIndex) > 0) { // changes are all after currently displayed
			return;
		}
		BigInteger anchorIndex = firstDisplayedIndex;
		int anchorOffset = layouts.get(0).getYPos();

		AnchoredLayout layout = findLayoutOnScreen(cursorPosition.getIndex());

		if (layout != null) {
			// if the cursor is on the screen, reposition relative to cursor and
			// not top of screen.
			anchorIndex = cursorPosition.getIndex();
			anchorOffset = layout.getYPos();
		}
		notifyScrollListenerDataChanged(start, end);

		layouts = layoutHandler.positionLayoutsAroundAnchor(anchorIndex, anchorOffset);

		adjustCursorForDataChange();
		cursorHandler.updateCursor(cursorPoint);
		notifyScrollListenerViewChangedAndRepaint();
	}
Sets the layout model for this field panel

@param model the layout model to use.
Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/FieldPanel.java