package ArrayDemos;

/**
 * SortButton.java
 *
 *
 * Created: Mon Apr 23 09:37:55 2001
 *
 * @author Stuart C. Shapiro
 */

public class SortButton extends NGP.Components.PushButton{
    private HistogramColumn[] _columns;
    private NGP.Containers.Row _columnContainer;
    private Histogram _hist;
    private ColumnComparitor _comparitor;

    public SortButton (NGP.Container container, String name,
		       HistogramColumn[] columns,
		       NGP.Containers.Row columnContainer,
		       Histogram hist, ColumnComparitor comparitor){
	super(container, name);
	_columns = columns;
	_columnContainer = columnContainer;
	_hist = hist;
	_comparitor = comparitor;
    }

    public void release(){
	sort(_columns.length-1,"");
	    }

    /** Sort _columns[0 .. max] */
    private void sort(int max, String tab){
	System.out.println(tab + "Sorting Columns[0.." + max + "].");
	if (max > 0) {
	    sort(max-1, tab + "   ");
	    _columnContainer.remove(_columns[max]);
	    _hist.pack();
	    insert(_columns[max], max, tab);
	} // end of if
	System.out.println(tab + "Columns[0.." + max + "] Sorted.");	
    }

    /**
     * Insert column into _columns[0 .. max] in sorted order,
     * assuming that _columns[0 .. max-1] is sorted
     * and that _columns[max] is available.
     */
    private void insert(HistogramColumn column, int max, String tab){
	System.out.println(tab + "Try inserting at position " + max);
	if (max == 0
	    || _comparitor.beforeOrEqual(_columns[max-1], column)) {
	    _columns[max] = column;
	    _columnContainer.add(column);
	    _hist.pack();
	    System.out.println(tab + "Inserting at position " + max);
	} // end of if
	
	else {
	    _columns[max] = _columns[max-1];
	    _columnContainer.remove(_columns[max]);
	    insert(column, max-1, tab + "   ");
	    _columnContainer.add(_columns[max]);
	    _hist.pack();
	} // end of else
	System.out.println(tab + "Done inserting");
    }
}// SortButton
