package cnp.ew.list;

import java.awt.*;
import java.util.*;
import cnp.ew.util.*;
import cnp.ew.displayer.*;
import cnp.ew.converter.*;
import cnp.ew.properties.*;
import cnp.ew.lightweight.*;

public class CpTreeListPane extends CpColumnarListPane
{

    public void setupDisplayer(int index, CpModelSelectableDisplayable tempDisplayer)
    {
        // This is WEIRD!!             TBD: resolve with Ted

        if (tempDisplayer instanceof CpTreeDisplayer) {
            CpTreeDisplayer treeDisplayer = (CpTreeDisplayer)tempDisplayer;
            CpTreeModel treeModel = (CpTreeModel)listModel;
            treeDisplayer.setParameters(displayer, treeModel.getIndentLevel(index), treeModel.getIsExpanded(index),
                treeModel.getHasChildren(index),
                treeModel.getSize() - 1 == index || treeModel.getIndentLevel(index + 1) < treeModel.getIndentLevel(index));
            treeDisplayer.firstItem = (index == 0);
        }

    }
    void sortColumn(int columnId)
    {
    }

    public int getIndentLevel(int index)
    {
        return ((CpTreeModel)listModel).getIndentLevel(index);
    }

    public void expand(int index)
    {
        ((CpTreeModel)listModel).expandIndex(index);
    }


    public Rectangle getEditorRect(CpEditor e, int index, CpColumnModel column)
    {
        int editorY = cellToPoint(0, index).y;
        Dimension editorPreferred = editor.preferredSize();
        editorY += (getCellHeight(index) - Math.max(editorPreferred.height, getCellHeight(index))) / 2;
        int editorX = xForColumn(column) + (getIndentLevel(index) + 2) * CpTreeDisplayer.INDENT_SPACING;

        ((CpAbstractLc)e).setBorderStyle(BORDER_LINE);
        e.setHorizontalAlignment(column.getAlignment());
        e.setVerticalAlignment(CpAlignable.ALIGN_CENTER);
/*        if (column.getAlignment() == CpAlignable.ALIGN_RIGHT) {
            editorX = editorX + column.getExtent() - editorPreferred.width;
        }
        if (column.getAlignment() == CpAlignable.ALIGN_CENTER) {
            editorX = editorX + (column.getExtent() - editorPreferred.width / 2);
        }
        */
        return new Rectangle(editorX, editorY, editorPreferred.width, Math.max(editorPreferred.height, getCellHeight(index)));
    }
}

