/***************************************************************************
                          dlg_selectengine.cpp  -  description
                             -------------------
    begin                : Wed Aug 28 2002
    copyright            : (C) 2003 by Troy Corbin Jr.
    email                : tcorbin@users.sf.net
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#include "dlg_selectengine.moc"
#include <tqvbox.h>
#include <tqgroupbox.h>
#include <tqslider.h>
#include <tqlabel.h>
#include <kcombobox.h>
#include "resource.h"

dlg_selectengine::dlg_selectengine(TQWidget *parent, resource *Rsrc, bool army ) :
	KDialogBase(	parent,
								0,
								true,
								i18n("Select Computer Player"),
								Help|Ok,
								Ok,
								true )
{
	Resource = Rsrc;
	Army = army;
	BOX_Parent = makeVBoxMainWidget();

	BOX_Engine = new TQGroupBox( 1,
															TQt::Horizontal,
															i18n( "Computer Players" ),
															BOX_Parent );
	COMBO_Engine = new KComboBox( BOX_Engine );
	COMBO_Engine->setEditable( false );

//	BOX_EngineHelper = new TQGroupBox( 1,
//															TQt::Horizontal,
//															i18n( "Computer Players' Helper" ),
//															BOX_Parent );
//	COMBO_EngineHelper = new KComboBox( BOX_Engine );
//	COMBO_EngineHelper->setEditable( false );

	buildEngineData();

	connect( COMBO_Engine, TQ_SIGNAL( activated(int) ), this, TQ_SLOT( slotCurrent(int) ) );
//	connect( COMBO_EngineHelper, TQ_SIGNAL( activated(int) ), this, TQ_SLOT( slotCurrentHelper(int) ) );


	GROUP_Strength = new TQGroupBox( 3,
																	TQt::Horizontal,
																	i18n( "Player Strength" ),
																	BOX_Parent );
	LABEL_Str_Min = new TQLabel( i18n( "Weak" ), GROUP_Strength );
	SLIDER_Strength = new TQSlider ( 1,
																	7,
																	1,
																	Resource->Strength[ 1 * ( Army == BLACK ) ],
																	TQt::Horizontal,
																	GROUP_Strength );
	LABEL_Str_Max = new TQLabel( i18n( "Strong" ), GROUP_Strength );
	SLIDER_Strength->setTickmarks( TQSlider::Below );
	connect( SLIDER_Strength, TQ_SIGNAL( valueChanged(int) ), this, TQ_SLOT( slotStrength(int) ) );
}
dlg_selectengine::~dlg_selectengine()
{
}
///////////////////////////////////////
//
//	dlg_selectengine::buildEngineData
//
///////////////////////////////////////
void dlg_selectengine::buildEngineData( void )
{
	bool FLAG1(false);
//	bool FLAG2(false);
	int Index(0);
	TQStringList EngineList;
	engineList::Iterator enginesIT;

	/* Clear Comboboxes */
	COMBO_Engine->clear();
//	COMBO_EngineHelper->clear();

	/* Handle status of Book-engine boxes */
//	White_Use_Book->setChecked( Resource->OPTION_Book_White );
//	Engines_White_Book->setEnabled( Resource->OPTION_Book_White );

	if( Army == WHITE )
	{
		Engine1F = ENGINE_WHITE;
		Engine2F = ENGINE_WHITE_BK;
	}
	else
	{
		Engine1F = ENGINE_BLACK;
		Engine2F = ENGINE_BLACK_BK;
	}

	/* Read the engine list */
	if( Resource->engines.isEmpty() ) return;
	for ( enginesIT = Resource->engines.begin(); enginesIT != Resource->engines.end(); ++enginesIT )
	{
		EngineList.append( (*enginesIT).Name );
	}

	/* Insert engines into comboboxes */
	EngineList.sort();
	COMBO_Engine->insertStringList( EngineList );
//	COMBO_EngineHelper->insertStringList( EngineList );

	/* Now run the list again, setting the current engine for each combobox */
	for ( enginesIT = Resource->engines.begin(); enginesIT != Resource->engines.end(); ++enginesIT )
	{
		if( (*enginesIT).CurrentRef & Engine1F )
			for( Index = 0; Index < COMBO_Engine->count(); Index++ )
				if( COMBO_Engine->text(Index) == (*enginesIT).Name )
				{
					COMBO_Engine->setCurrentItem(Index);
					FLAG1 = true;
				}
//		if( (*enginesIT).CurrentRef & Engine2F )
//			for( Index = 0; Index < COMBO_Engine->count(); Index++ )
//				if( COMBO_EngineHelper->text(Index) == (*enginesIT).Name )
//				{
//					COMBO_EngineHelper->setCurrentItem(Index);
//					FLAG2 = true;
//				}
	}

	/*
			This prevents a bug where you had to modify the
			current_engine_comboboxes before you could get any engines to run.
	*/
	if( ( !FLAG1 ) && ( COMBO_Engine->count() ) ) slotCurrent( COMBO_Engine->currentItem() );
//	if( ( !FLAG2 ) && ( COMBO_EngineHelper->count() ) ) slotCurrentHelper( COMBO_EngineHelper->currentItem() );
}
///////////////////////////////////////
//
//	dlg_selectengine::slotCurrent
//
///////////////////////////////////////
void dlg_selectengine::slotCurrent( int Index )
{
	TQString Name;
	engineList::Iterator enginesIT;
	
	Name = COMBO_Engine->text(Index);
	for ( enginesIT = Resource->engines.begin(); enginesIT != Resource->engines.end(); ++enginesIT )
	{
		if( (*enginesIT).CurrentRef & Engine1F ) (*enginesIT).CurrentRef -= Engine1F;
		if( (*enginesIT).Name == Name ) (*enginesIT).CurrentRef |= Engine1F;
	}
	emit valuesChanged();
}
///////////////////////////////////////
//
//	dlg_selectengine::slotCurrentHelper
//
///////////////////////////////////////
void dlg_selectengine::slotCurrentHelper( int Index )
{
	TQString Name;
	engineList::Iterator enginesIT;
	
	Name = COMBO_EngineHelper->text(Index);
	for ( enginesIT = Resource->engines.begin(); enginesIT != Resource->engines.end(); ++enginesIT )
	{
		if( (*enginesIT).CurrentRef & Engine2F ) (*enginesIT).CurrentRef -= Engine2F;
		if( (*enginesIT).Name == Name ) (*enginesIT).CurrentRef |= Engine2F;
	}
	emit valuesChanged();
}
///////////////////////////////////////
//
//	dlg_selectengine::strength
//
///////////////////////////////////////
int dlg_selectengine::strength( void )
{
	return SLIDER_Strength->value();
}
///////////////////////////////////////
//
//	dlg_selectengine::slotStrength
//
///////////////////////////////////////
void dlg_selectengine::slotStrength( int value )
{
	Resource->Strength[Army] = value;
	emit valuesChanged();
}
