// Path: src/omr/QuestionGroup.java
// public enum QuestionGroupEvent {
// 	POSITION_CHANGED,    // Coordinates, dimensions or orientation is changed. Bubble values must be updated.
// 	STRUCTURE_CHANGED,   // Row count, column count or index offset is changed. Sheet structure must be updated.
// 	ANSWER_KEY_CHANGED
// }


import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Observable;
import java.util.Observer;
import omr.QuestionGroup.QuestionGroupEvent;
     */
    public void removeRegistrationMarker(RegistrationMarker marker) {
        registrationMarkers.remove(marker);
        marker.deleteObserver(this);
        
        // Notify observers
        setChanged();
        notifyObservers(SheetStructureEvent.REGISTRATION_CHANGED);
    }
    
    /**
     * Returns a list of registration markers in the sheet structure.
     */
    public AbstractList<RegistrationMarker> getRegistrationMarkers() {
        return registrationMarkers;
    }
    
    /**
     * Sorts question groups by index offset.
     */
    private void sortGroups() {
    	Collections.sort(this.questionGroups);
    }
    
    /**
     * Notified by structure components when they change.
     */
    public void update(Observable source, Object event) {
    	setChanged();
    	
// Path: src/omr/QuestionGroup.java
// public enum QuestionGroupEvent {
// 	POSITION_CHANGED,    // Coordinates, dimensions or orientation is changed. Bubble values must be updated.
// 	STRUCTURE_CHANGED,   // Row count, column count or index offset is changed. Sheet structure must be updated.
// 	ANSWER_KEY_CHANGED
// }


// Path: src/omr/SheetStructure.java
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Observable;
import java.util.Observer;
import omr.QuestionGroup.QuestionGroupEvent;

     */
    public void removeRegistrationMarker(RegistrationMarker marker) {
        registrationMarkers.remove(marker);
        marker.deleteObserver(this);
        
        // Notify observers
        setChanged();
        notifyObservers(SheetStructureEvent.REGISTRATION_CHANGED);
    }
    
    /**
     * Returns a list of registration markers in the sheet structure.
     */
    public AbstractList<RegistrationMarker> getRegistrationMarkers() {
        return registrationMarkers;
    }
    
    /**
     * Sorts question groups by index offset.
     */
    private void sortGroups() {
    	Collections.sort(this.questionGroups);
    }
    
    /**
     * Notified by structure components when they change.
     */
    public void update(Observable source, Object event) {
    	setChanged();
    	
    	if (QuestionGroupEvent.STRUCTURE_CHANGED == event) {