/*
 *   Copyright (C) 2006
 *   Siraj Razick <siraj@kdemail.net>
 *   PhobosK <phobosk@mail.kbfx.net>
 *   see Also AUTHORS
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU Library General Public License version 2 as
 *   published by the Free Software Foundation
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details
 *
 *   You should have received a copy of the GNU Library General Public
 *   License along with this program; if not, write to the
 *   Free Software Foundation, Inc.,
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#include "kbfxplasmapixmapprovider.h"

int
KbfxPlasmaPixmapProvider::addPixmap ( TQString pixmapname )
{
	TQString lFileName = PixmapPath( pixmapname );
	TQPixmap * lPixmapPtr = 0;

	if ( ( lPixmapPtr = TQPixmapCache::find ( pixmapname ) ) == NULL )
	{
		lPixmapPtr = new TQPixmap ( lFileName );
		TQPixmapCache::insert ( pixmapname,lPixmapPtr );
		return ( lPixmapPtr->height() *lPixmapPtr->width() *lPixmapPtr->depth() ) /8;
	}
	return 0;
}

TQString
KbfxPlasmaPixmapProvider::PixmapPath ( TQString pixmapName )
{
	TQString lFileName = ConfigInit ().m_SpinxThemeBasePath + ConfigInit ().m_SpinxThemeName + "/" + pixmapName + ".png";

	if ( TQPixmap ( lFileName ).isNull() )
		lFileName = locate ( "data", "kbfx/skins/default/" + pixmapName + ".png" );

	return lFileName;
}

TQString
KbfxPlasmaPixmapProvider::PixmapPath ( TQString pixmapName, TQString themePath,  TQString themeName )
{
	TQString lFileName = themePath + themeName + "/" + pixmapName + ".png";

	if ( TQPixmap ( lFileName ).isNull() )
		lFileName = locate ( "data", "kbfx/skins/default/" + pixmapName + ".png" );

	return lFileName;
}

bool
KbfxPlasmaPixmapProvider::PixmapPathCheck ( TQString pixmapPath )
{
	if ( TQPixmap ( pixmapPath ).isNull() )
		return false;

	return true;
}

void
KbfxPlasmaPixmapProvider::deletePixmap ( const TQString & key )
{
	TQPixmapCache::remove ( key );
}

void
KbfxPlasmaPixmapProvider::rebuildCache()
{
	TQPixmapCache::clear ();
	buildCache();
}

void KbfxPlasmaPixmapProvider::buildCache()
{
//m_skinElements.append("topbg");
	TQPixmapCache::setCacheLimit ( 1024*5 );
	static TQStringList  m_skinElements;
	m_skinElements
	<<"appfind"
	<<"bg"
	<<"botbg"
	<<"butterfly"
	<<"dudebox"
	<<"find"
	<<"hover"
	<<"indexseparator"
	<<"listboxbg"
	<<"lock"
	<<"lockhover"
	<<"logout"
	<<"logouthover"
	<<"mask"
	<<"menu_top"
	<<"menu_top_image_person"
	<<"middleboxbg"
	<<"normal"
	<<"off"
	<<"on"
	<<"pressed"
	<<"preview"
	<<"rhshovertile"
	<<"rhstile"
	<<"scrollnormal"
	<<"separator"
	<<"tabbg"
	<<"tilehover"
	<<"tilenormal"
	<<"topbg"
        <<"appviewbg"
	;

	for ( TQStringList::Iterator it = m_skinElements.begin(); it != m_skinElements.end(); ++it )
	{
		TQPixmapCache::setCacheLimit ( KbfxPlasmaPixmapProvider::addPixmap ( *it ) +TQPixmapCache::cacheLimit() );
	}


}

TQPixmap *
KbfxPlasmaPixmapProvider::pixmap ( const TQString & key )
{
	TQPixmap* pp;
	TQPixmap p;
	if ( ( pp=TQPixmapCache::find ( key ) ) )
	{
		return pp;
	}
	else
	{
		addPixmap ( key );
		return pixmap ( key );
	}

}

