You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegames/kenolaba/EvalDlgImpl.cpp

300 lines
10 KiB

/**
* Some Implementation details for configEval Dialog
*
*/
#include <qvalidator.h>
#include <qlineedit.h>
#include <qlcdnumber.h>
#include <klineeditdlg.h>
#include <qlistbox.h>
#include <qpushbutton.h>
#include <kconfig.h>
#include <klocale.h>
#include <kdebug.h>
#include <kapplication.h>
#include "EvalDlgImpl.h"
#include "Board.h"
#include "EvalScheme.h"
EvalDlgImpl::EvalDlgImpl(QWidget* parent, Board* board)
:EvalDlg(parent)
{
_board = board;
_origScheme = board->evalScheme();
_scheme = new EvalScheme(*_origScheme);
connect( evalDelete, SIGNAL( clicked() ), this, SLOT( deleteEntry() ) );
connect( evalSaveAs, SIGNAL( clicked() ), this, SLOT( saveas() ) );
connect( evalList, SIGNAL( highlighted(int) ), this, SLOT( select(int) ) );
KConfig* config = kapp->config();
config->setGroup("General");
QStringList list = config->readListEntry("EvalSchemes");
evalList->insertItem( i18n("Current") );
evalList->insertItem( i18n("Default") );
for(int i=0;i<list.count();i++)
evalList->insertItem(list[i]);
evalList->setSelected(0, TRUE);
updateWidgets();
connectEditLines();
}
EvalDlgImpl::~EvalDlgImpl()
{
delete _scheme;
}
void EvalDlgImpl::connectEditLines()
{
connect( moveEval1, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( moveEval2, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( moveEval3, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( moveEval4, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( moveEval5, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( moveEval6, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( moveEval7, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( moveEval8, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( moveEval9, SIGNAL(textChanged(const QString&)), this, SLOT(updateMove()) );
connect( posEval1, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( posEval2, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( posEval3, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( posEval4, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( posEval5, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( diffEval2, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( diffEval3, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( diffEval4, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( diffEval5, SIGNAL(textChanged(const QString&)), this, SLOT(updateFields()) );
connect( rowEval2, SIGNAL(textChanged(const QString&)), this, SLOT(updateInARow()) );
connect( rowEval3, SIGNAL(textChanged(const QString&)), this, SLOT(updateInARow()) );
connect( rowEval4, SIGNAL(textChanged(const QString&)), this, SLOT(updateInARow()) );
connect( rowEval5, SIGNAL(textChanged(const QString&)), this, SLOT(updateInARow()) );
connect( countEval1, SIGNAL(textChanged(const QString&)), this, SLOT(updateCount()) );
connect( countEval2, SIGNAL(textChanged(const QString&)), this, SLOT(updateCount()) );
connect( countEval3, SIGNAL(textChanged(const QString&)), this, SLOT(updateCount()) );
connect( countEval4, SIGNAL(textChanged(const QString&)), this, SLOT(updateCount()) );
connect( countEval5, SIGNAL(textChanged(const QString&)), this, SLOT(updateCount()) );
}
void EvalDlgImpl::disconnectEditLines()
{
moveEval1->disconnect();
moveEval2->disconnect();
moveEval3->disconnect();
moveEval4->disconnect();
moveEval5->disconnect();
moveEval6->disconnect();
moveEval7->disconnect();
moveEval8->disconnect();
moveEval9->disconnect();
posEval1->disconnect();
posEval2->disconnect();
posEval3->disconnect();
posEval4->disconnect();
posEval5->disconnect();
diffEval2->disconnect();
diffEval3->disconnect();
diffEval4->disconnect();
diffEval5->disconnect();
rowEval2->disconnect();
rowEval3->disconnect();
rowEval4->disconnect();
rowEval5->disconnect();
countEval1->disconnect();
countEval2->disconnect();
countEval3->disconnect();
countEval4->disconnect();
countEval5->disconnect();
}
void EvalDlgImpl::updateWidgets()
{
// Moves
moveEval1->setText( QString::number(_scheme->moveValue(Move::move1)) );
moveEval2->setText( QString::number(_scheme->moveValue(Move::move2)) );
moveEval3->setText( QString::number(_scheme->moveValue(Move::move3)) );
moveEval4->setText( QString::number(_scheme->moveValue(Move::push1with2)) );
moveEval5->setText( QString::number(_scheme->moveValue(Move::push1with3)) );
moveEval6->setText( QString::number(_scheme->moveValue(Move::push2)) );
moveEval7->setText( QString::number(_scheme->moveValue(Move::out1with2)) );
moveEval8->setText( QString::number(_scheme->moveValue(Move::out1with3)) );
moveEval9->setText( QString::number(_scheme->moveValue(Move::out2)) );
// Position
posEval1->setText( QString::number(_scheme->ringValue(0)) );
posEval2->setText( QString::number(_scheme->ringValue(1)) );
posEval3->setText( QString::number(_scheme->ringValue(2)) );
posEval4->setText( QString::number(_scheme->ringValue(3)) );
posEval5->setText( QString::number(_scheme->ringValue(4)) );
diffEval2->setText( QString::number(_scheme->ringDiff(1)) );
diffEval3->setText( QString::number(_scheme->ringDiff(2)) );
diffEval4->setText( QString::number(_scheme->ringDiff(3)) );
diffEval5->setText( QString::number(_scheme->ringDiff(4)) );
// InARow
rowEval2->setText( QString::number(_scheme->inARowValue(0)) );
rowEval3->setText( QString::number(_scheme->inARowValue(1)) );
rowEval4->setText( QString::number(_scheme->inARowValue(2)) );
rowEval5->setText( QString::number(_scheme->inARowValue(3)) );
// Count
countEval1->setText( QString::number(_scheme->stoneValue(1)) );
countEval2->setText( QString::number(_scheme->stoneValue(2)) );
countEval3->setText( QString::number(_scheme->stoneValue(3)) );
countEval4->setText( QString::number(_scheme->stoneValue(4)) );
countEval5->setText( QString::number(_scheme->stoneValue(5)) );
updateEval();
}
void EvalDlgImpl::updateEval()
{
int value;
// set temporary the new scheme
_board->setEvalScheme(_scheme);
value = - _board->calcEvaluation();
_board->setEvalScheme(_origScheme);
kdDebug(12011) << "Updated Eval: " << value << endl;
if (value<-15999 || value>15999) value=0;
actualEval->display(value);
}
void EvalDlgImpl::updateMove()
{
_scheme->setMoveValue(Move::move1, moveEval1->text().toInt());
_scheme->setMoveValue(Move::move2, moveEval2->text().toInt());
_scheme->setMoveValue(Move::left2, moveEval2->text().toInt());
_scheme->setMoveValue(Move::right2, moveEval2->text().toInt());
_scheme->setMoveValue(Move::move3, moveEval3->text().toInt());
_scheme->setMoveValue(Move::left3, moveEval3->text().toInt());
_scheme->setMoveValue(Move::right3, moveEval3->text().toInt());
_scheme->setMoveValue(Move::push1with2, moveEval4->text().toInt());
_scheme->setMoveValue(Move::push1with3, moveEval5->text().toInt());
_scheme->setMoveValue(Move::push2, moveEval6->text().toInt());
_scheme->setMoveValue(Move::out1with2, moveEval7->text().toInt());
_scheme->setMoveValue(Move::out1with3, moveEval8->text().toInt());
_scheme->setMoveValue(Move::out2, moveEval9->text().toInt());
updateEval();
}
void EvalDlgImpl::updateCount()
{
_scheme->setStoneValue(1, countEval1->text().toInt());
_scheme->setStoneValue(2, countEval2->text().toInt());
_scheme->setStoneValue(3, countEval3->text().toInt());
_scheme->setStoneValue(4, countEval4->text().toInt());
_scheme->setStoneValue(5, countEval5->text().toInt());
updateEval();
}
void EvalDlgImpl::updateFields()
{
_scheme->setRingValue(0, posEval1->text().toInt());
_scheme->setRingValue(1, posEval2->text().toInt());
_scheme->setRingValue(2, posEval3->text().toInt());
_scheme->setRingValue(3, posEval4->text().toInt());
_scheme->setRingValue(4, posEval5->text().toInt());
_scheme->setRingDiff(1, diffEval2->text().toInt());
_scheme->setRingDiff(2, diffEval3->text().toInt());
_scheme->setRingDiff(3, diffEval4->text().toInt());
_scheme->setRingDiff(4, diffEval5->text().toInt());
updateEval();
}
void EvalDlgImpl::updateInARow()
{
_scheme->setInARowValue(0, rowEval2->text().toInt());
_scheme->setInARowValue(1, rowEval3->text().toInt());
_scheme->setInARowValue(2, rowEval4->text().toInt());
_scheme->setInARowValue(3, rowEval5->text().toInt());
updateEval();
}
void EvalDlgImpl::deleteEntry()
{
int i = evalList->currentItem();
// You cannot delete Pseudo Items 0 (Current) and 1 (Default)
if (i>1) {
QString name = evalList->text(i);
evalList->removeItem(i);
KConfig* config = kapp->config();
config->setGroup("General");
QStringList list = config->readListEntry("EvalSchemes");
list.remove(name);
config->writeEntry("EvalSchemes", list);
config->sync();
}
}
void EvalDlgImpl::saveas()
{
KLineEditDlg dlg(i18n("Name for scheme:"), QString::null, this);
dlg.setCaption(i18n("Save Scheme"));
if (dlg.exec()) {
QString name=dlg.text();
KConfig* config = kapp->config();
config->setGroup("General");
QStringList list = config->readListEntry("EvalSchemes");
QListBoxItem *it = evalList->findItem(name);
if (!it) {
evalList->insertItem(name);
it = evalList->findItem(name);
list << name;
config->writeEntry("EvalSchemes", list);
}
evalList->setSelected(it, TRUE);
EvalScheme savedScheme(*_scheme);
savedScheme.setName(name);
savedScheme.save(config);
config->sync();
}
}
void EvalDlgImpl::select(int i)
{
QString name = evalList->text(i);
delete _scheme;
_scheme = 0;
// 2 fixed entries: 0 is Current (origScheme), 1 is Default
if (i == 0) _scheme = new EvalScheme(*_origScheme);
else if (i==1) {
_scheme = new EvalScheme(name);
}
else {
// read in the Scheme from the config file
_scheme = new EvalScheme(name);
KConfig* config = kapp->config();
_scheme->read(config);
}
kdDebug(12011) << "Selected " << name << ", Index " << i << endl;
disconnectEditLines();
updateWidgets();
connectEditLines();
}
#include "EvalDlgImpl.moc"