package cnp.ew.notebook;
import cnp.ew.util.*;
import java.awt.*;
import java.util.*;
import cnp.ew.displayer.*;
import cnp.ew.lightweight.*;


abstract public class CpAbstractNotebookLc extends CpAbstractLc
{
    CpTabsLc tabsLc;
    CpNotebookPagesPanelLc pagesPanelLc;

    public CpAbstractNotebookLc()
    {
        addTabsAndPagesPanel();
    }

    public boolean onFirstPage()
    {
        return getSelectedPageIndex() == 0;
    }

    public boolean onLastPage()
    {
        return getSelectedPageIndex() == (getPageCount() - 1);
    }

    public void selectPreviousPage()
    {
        if (onFirstPage()) {
            return;
        }
        setSelectedPageIndex(getSelectedPageIndex() - 1);
    }

    public void selectNextPage()
    {
        if (onLastPage()) {
            return;
        }
        setSelectedPageIndex(getSelectedPageIndex() + 1);
    }

    public void addPage(String tabLabel, CpLightweightComponent lc)
    {
        pagesPanelLc.addPage(lc);
        tabsLc.addTab(tabLabel);
    }

    public void addPage(CpDisplayable tabDisplayer, CpLightweightComponent lc)
    {
        pagesPanelLc.addPage(lc);
        tabsLc.addTab(tabDisplayer);
    }

    public int getPageCount()
    {
        return pagesPanelLc.getPageCount();
    }


    public void setSelectedPageIndex(int i)
    {
        tabsLc.setSelectedTabIndex(i);
    }

    public int getSelectedPageIndex()
    {
        return tabsLc.getSelectedTabIndex();
    }

    public CpLightweightComponent getSelectedPage()
    {
        return pagesPanelLc.getSelectedPage();
    }

    public void update(CpObservable o, int facet, Object arg)
    {
        if (o == tabsLc && facet == CpTabsLc.TAB_CHANGED) {
            notifyObservers(PAGE_SELECTING);
            pagesPanelLc.setSelectedPageIndex(tabsLc.getSelectedTabIndex());
            notifyObservers(PAGE_SELECTED);
        }
    }

    public boolean gotFocus()
    {
        tabsLc.requestFocus();
        return true;
    }

    public void setIsTabStop(boolean isTabStop)
    {
        tabsLc.setIsTabStop(isTabStop);
    }

    abstract void addTabsAndPagesPanel();
}



