/**********************************************************************
** Copyright (C) 2002 Stefan Eilers (se, eilers.stefan@epost.de
**
** This file may be distributed and/or modified under the terms of the
** GNU Library General Public License version 2 as published by the
**  Free Software Foundation and appearing in the file LICENSE.GPL
** included in the packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************/


#include "ocheckitem.h"

/**
 * Constructs an CheckItem with a QTable as parent
 * and a sort key for.
 * The sort key will be used by QTable to sort the table later
 * @param t The parent QTable where the check item belongs
 * @param key A sort key
 */
OCheckItem::OCheckItem( QTable *t, const QString &key )
    : QTableItem( t, Never, "" ), m_checked( FALSE ), m_sortKey( key )
{
}

/**
 * reimplemted for internal reasons
 * @return Returns the sort key of the Item
 * @see QTableItem
 */
QString OCheckItem::key() const
{
    return m_sortKey;
}

/**
 * This method can check or uncheck the item. It will
 * call QTable to update the cell.
 *
 * @param b Whether to check or uncheck the item
 */
void OCheckItem::setChecked( bool b )
{
    m_checked = b;
    table()->updateCell( row(), col() );
}

/**
 * This will toggle the item. If it is checked it'll get
 * unchecked by this method or vice versa.
 */
void OCheckItem::toggle()
{
    m_checked = !m_checked;
}

/**
 * This will return the state of the item.
 *
 * @return Returns true if the item is checked
 */
bool OCheckItem::isChecked() const
{
    return m_checked;
}

/**
 * @internal
 * This paints the item
 */
void OCheckItem::paint( QPainter *p, const QColorGroup &cg, const QRect &cr,
		       bool )
{
    p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) );

    int marg = ( cr.width() - BoxSize ) / 2;
    int x = 0;
    int y = ( cr.height() - BoxSize ) / 2;
    p->setPen( QPen( cg.text() ) );
    p->drawRect( x + marg, y, BoxSize, BoxSize );
    p->drawRect( x + marg+1, y+1, BoxSize-2, BoxSize-2 );
    p->setPen( darkGreen );
    x += 1;
    y += 1;
    if ( m_checked ) {
	QPointArray a( 7*2 );
	int i, xx, yy;
	xx = x+1+marg;
	yy = y+2;
	for ( i=0; i<3; i++ ) {
	    a.setPoint( 2*i,   xx, yy );
	    a.setPoint( 2*i+1, xx, yy+2 );
	    xx++; yy++;
	}
	yy -= 2;
	for ( i=3; i<7; i++ ) {
	    a.setPoint( 2*i,   xx, yy );
	    a.setPoint( 2*i+1, xx, yy+2 );
	    xx++; yy--;
	}
	p->drawLineSegments( a );
    }
}