package cnp.ew.list;

import java.util.*;
import java.awt.*;

import cnp.ew.scrolling.*;
import cnp.ew.converter.*;
import cnp.ew.displayer.*;
import cnp.ew.util.*;
import cnp.ew.properties.*;

public class CpListboxLc extends CpScrollingController
{
    public CpListPane listPane;

    public CpListboxLc()
    {
        this(true);
    }

    public CpListboxLc(boolean hScroll)
    {
        this(true, hScroll);
    }

    public CpListboxLc(boolean vScroll, boolean hScroll)
    {
        super(vScroll, hScroll);
        scroller.setScrollable(listPane = createListPane());
        listPane.addObserver(this);
    }

    public CpListPane createListPane()
    {
        return new CpListPane();
    }

    public void select(int index)
    {
        listPane.select(index, CpSelectionModel.NORMAL_SELECT);
    }


    /********** PASSED ALONG TO PANE **************/

    public Dimension preferredSize()
    {
        return listPane.preferredSize();
    }

    public void setItems(Vector v)
    {
        listPane.setItems(v);
    }

    public Object getSelectedItem()
    {
        return listPane.getSelectedItem();
    }

    public void setCellSize(Dimension d)
    {
        listPane.setCellSize(d);
    }

    public void setEditor(CpEditor newEditor)
    {
        listPane.setEditor(newEditor);
    }

    public void setConverter(CpToStringConverter newConverter)
    {
        listPane.setConverter(newConverter);
    }

    public void setDisplayer(CpModelSelectableDisplayable newDisplayer)
    {
        listPane.setDisplayer(newDisplayer);
    }

    public Object getItem(int i)
    {
        return listPane.getItem(i);
    }

    public String verticalScrollingTextFor(int i)
    {
        return listPane.textFor(i);
    }

    public void update(CpObservable o, int facet, Object arg)
    {
        switch (facet) {
            case CpEvent.OBJECT_CHANGED : {
                notifyObservers(OBJECT_CHANGED);
                break;
            }
        }
        super.update(o, facet, arg);
    }

    /**
     * TBD: This is questionable.  We may want a general strategy for having the child be able to
     * tell whether it should be a tab stop.
     */
    public void setIsTabStop(boolean isTabStop)
    {
        listPane.setIsTabStop(isTabStop);
    }
}

