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;
}

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 ; }
called when the graph model changes . invokes processchange on each item of the given array to update the view accordingly .
