question: public mxRectangle graphModelChanged ( mxIGraphModel sender , List < mxUndoableChange > changes , Boolean rv ) { int thresh = getChangesRepaintThreshold ( ) ; boolean ignoreDirty = thresh > 0 && changes . size ( ) > thresh ; if ( ! ignoreDirty ) { Iterator < mxUndoableChange > it = changes . iterator ( ) ; while ( it . hasNext ( ) ) { if ( it . next ( ) instanceof mxRootChange ) { ignoreDirty = true ; break ; } } } ArrayList < Object > changedCells = new ArrayList < Object > ( ) ; mxRectangle dirty = processChanges ( changes , true , ignoreDirty , changedCells ) ; if ( ! rv ) { if ( changedCells != null ) { for ( Object changedCell : changedCells ) { mxCellState parentState = view . getState ( model . getParent ( changedCell ) , true ) ; view . validate ( parentState , changedCell , false ) ; } } } else view . validate ( ) ; if ( ! ignoreDirty ) { mxRectangle tmp = processChanges ( changes , false , ignoreDirty ) ; if ( tmp != null ) { if ( dirty == null ) { dirty = tmp ; } else { dirty . add ( tmp ) ; } } } removeSelectionCells ( getRemovedCellsForChanges ( changes ) ) ; return dirty ; }
target:  Called when the graph model changes. Invokes processChange on each item of the given array to update the view accordingly.