mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 14:16:09 -06:00
608 lines
18 KiB
C++
608 lines
18 KiB
C++
#include "VegaMain.h"
|
|
#include "Tournament.h"
|
|
#include "SwissUSCF.h"
|
|
|
|
|
|
extern int CanPlayWith(int player1, int player2, int round);
|
|
//============= Aris ScrollArea ===========================
|
|
//====== can move to your lib ScrollArea.h ================
|
|
/*class ScrollArea : public StaticRect {
|
|
public:
|
|
ScrollBars sc;
|
|
StaticRect work;
|
|
void SetWorkSize(Size sz);
|
|
virtual void Scroll();
|
|
|
|
typedef ScrollArea CLASSNAME;
|
|
ScrollArea();
|
|
~ScrollArea() {;}
|
|
};
|
|
*/
|
|
//====== can move to your lib ScrollArea.cpp ================
|
|
void ScrollArea::Scroll()
|
|
{
|
|
Size ws = work.GetSize(); // WhenResize callback is needed?! or?...
|
|
work.SetRect(-sc.x, -sc.y, ws.cx, ws.cy);
|
|
}
|
|
|
|
|
|
void ScrollArea::SetWorkSize(Size ws)
|
|
{
|
|
work.SetRect(0,0,ws.cx,ws.cy);
|
|
sc.SetTotal(ws.cx,ws.cy); //can be adjusted depending on GetRect...
|
|
sc.SetPage(100,100); //can be calculated... let's keep for a while
|
|
}
|
|
|
|
|
|
ScrollArea::ScrollArea()
|
|
{
|
|
SetWorkSize(Size(500,1000));
|
|
AddFrame(sc);
|
|
Add(work);
|
|
//sc.HideX(); //
|
|
// sc.HideY(); // ADDED uncomment to hide...
|
|
|
|
sc.WhenScroll=THISBACK(Scroll);
|
|
// AddFrame(ThinOutsetFrame());
|
|
AddFrame(ThinInsetFrame());
|
|
}
|
|
|
|
/*
|
|
class ImageButton : public Button {
|
|
private:
|
|
int align;
|
|
public:
|
|
ImageButton() {align = ALIGN_CENTER; }; //default alignment is center
|
|
virtual void Paint(Draw& draw);
|
|
//void SetAlignment(int _align) {align = _align;}; //method to set the Alignment
|
|
void SetAlignment(int _align) {align=_align; Refresh();};
|
|
int GetAlignment() {return align;}; //method to get the alignment
|
|
};
|
|
|
|
void ImageButton::Paint(Draw& w)
|
|
{
|
|
Size sz = GetSize(); //this is the beginning of the original Paint method
|
|
bool ds = !IsShowEnabled();
|
|
DrawLabel dl;
|
|
///////////////////
|
|
dl.align = align; //this is the only line to be added
|
|
///////////////////
|
|
dl.text = label;
|
|
dl.font = Nvl(font, ButtonFont());
|
|
dl.limg = img;
|
|
dl.disabled = ds;
|
|
dl.lspc = !label.IsEmpty() && !img.IsEmpty() ? 4 : 0;
|
|
if(VisibleAccessKeys())
|
|
dl.accesskey = accesskey;
|
|
if(monoimg)
|
|
dl.lcolor = SColorText;
|
|
Value (*st)(int) = look;
|
|
if(look == ButtonLook) {
|
|
if(InFrame())
|
|
st = EdgeButtonLook;
|
|
if(type == OK)
|
|
st = OkButtonLook;
|
|
}
|
|
int i = GetVisualState();
|
|
ChPaint(w, sz, (*st)(i));
|
|
dl.ink = ButtonTextColor(i);
|
|
if(monoimg)
|
|
dl.lcolor = ButtonMonoColor(i);
|
|
int m = IsPush() && ButtonPressOffsetFlag();
|
|
dl.Paint(w, 3 + m, 3 + m, sz.cx - 6, sz.cy - 6);
|
|
};
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
enum {WY=0, WN, BY, BN, NG};
|
|
|
|
class ColoredRow : public WithRowLayout<ParentCtrl> {
|
|
public:
|
|
int wid, bid, board;
|
|
int wrtg, brtg;
|
|
float wscr, bscr;
|
|
int wflag, bflag;
|
|
typedef ColoredRow CLASSNAME;
|
|
|
|
ColoredRow();
|
|
void Set(int board, int wid, int bid, int wrtg, int brtg, float wscr, float bscr, int wflag, int bflag);
|
|
void SetSide(int side, int id, int rtg, float scr, int flag);
|
|
void GetSide(int side, int& id, int& rtg, float& scr, int& flag);
|
|
};
|
|
*/
|
|
|
|
ColoredRow::ColoredRow()
|
|
{
|
|
CtrlLayout(*this);
|
|
rect.Color(White);
|
|
wid = bid = board = 0;
|
|
wimg.SetImage(Vega5Img::whiteY());
|
|
bimg.SetImage(Vega5Img::blackN());
|
|
}
|
|
|
|
void ColoredRow::Set(int indexboard, int whiteid, int blackid, int whitertg, int blackrtg,
|
|
float whitescr, float blackscr, int whiteflag, int blackflag)
|
|
{ board = indexboard;
|
|
wid = whiteid;
|
|
bid = blackid;
|
|
wrtg = whitertg;
|
|
brtg = blackrtg;
|
|
wscr = whitescr;
|
|
bscr = blackscr;
|
|
wflag = whiteflag;
|
|
bflag = blackflag;
|
|
|
|
lblBoard.SetLabel(AsString(board));
|
|
lblwrtg.SetLabel(AsString(wrtg));
|
|
lblbrtg.SetLabel(AsString(brtg));
|
|
lblwscr.SetLabel(AsString(wscr));
|
|
lblbscr.SetLabel(AsString(bscr));
|
|
btnwid.SetLabel(AsString(wid));
|
|
btnbid.SetLabel(AsString(bid));
|
|
switch (wflag) {
|
|
case WY: wimg.SetImage(Vega5Img::whiteY());
|
|
break;
|
|
case WN: wimg.SetImage(Vega5Img::whiteN());
|
|
break;
|
|
case BY: wimg.SetImage(Vega5Img::blackY());
|
|
break;
|
|
case BN: wimg.SetImage(Vega5Img::blackN());
|
|
break;
|
|
case NG: wimg.SetImage(Vega5Img::neutral());
|
|
break;
|
|
}
|
|
switch (bflag) {
|
|
case WY: bimg.SetImage(Vega5Img::whiteY());
|
|
break;
|
|
case WN: bimg.SetImage(Vega5Img::whiteN());
|
|
break;
|
|
case BY: bimg.SetImage(Vega5Img::blackY());
|
|
break;
|
|
case BN: bimg.SetImage(Vega5Img::blackN());
|
|
break;
|
|
case NG: bimg.SetImage(Vega5Img::neutral());
|
|
break;
|
|
}
|
|
}
|
|
|
|
void ColoredRow::Get(int& whiteid, int& blackid, int& whitertg, int& blackrtg)
|
|
{
|
|
whiteid = wid;
|
|
blackid = bid;
|
|
whitertg = wrtg;
|
|
blackrtg = brtg;
|
|
}
|
|
|
|
void ColoredRow::SetSide(int side, int id, int rtg, float scr, int flag)
|
|
{
|
|
if (side == 1) { //right
|
|
bid = id;
|
|
brtg = rtg;
|
|
bscr = scr;
|
|
bflag = flag;
|
|
|
|
lblbrtg.SetLabel(AsString(rtg));
|
|
lblbscr.SetLabel(AsString(scr));
|
|
btnbid.SetLabel(AsString(id));
|
|
|
|
switch (flag) {
|
|
case WY: bimg.SetImage(Vega5Img::whiteY());
|
|
break;
|
|
case WN: bimg.SetImage(Vega5Img::whiteN());
|
|
break;
|
|
case BY: bimg.SetImage(Vega5Img::blackY());
|
|
break;
|
|
case BN: bimg.SetImage(Vega5Img::blackN());
|
|
break;
|
|
case NG: bimg.SetImage(Vega5Img::neutral());
|
|
break;
|
|
}
|
|
}
|
|
else { //left
|
|
wid = id;
|
|
wrtg = rtg;
|
|
wscr = scr;
|
|
wflag = flag;
|
|
|
|
lblwrtg.SetLabel(AsString(rtg));
|
|
lblwscr.SetLabel(AsString(scr));
|
|
btnwid.SetLabel(AsString(id));
|
|
switch (flag) {
|
|
case WY: wimg.SetImage(Vega5Img::whiteY());
|
|
break;
|
|
case WN: wimg.SetImage(Vega5Img::whiteN());
|
|
break;
|
|
case BY: wimg.SetImage(Vega5Img::blackY());
|
|
break;
|
|
case BN: wimg.SetImage(Vega5Img::blackN());
|
|
break;
|
|
case NG: wimg.SetImage(Vega5Img::neutral());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void ColoredRow::GetSide(int side, int& id, int& rtg, float& scr, int& flag)
|
|
{
|
|
if (side == 0) { //left
|
|
id = wid;
|
|
rtg = wrtg;
|
|
scr = wscr;
|
|
flag = wflag;
|
|
}
|
|
else { //right
|
|
id = bid;
|
|
rtg = brtg;
|
|
scr = bscr;
|
|
flag = bflag;
|
|
}
|
|
}
|
|
|
|
//-----------------------
|
|
/*
|
|
class Abbinamento : public WithAbbinamento<TopWindow> {
|
|
ColoredRow a[3];
|
|
// ScrollArea scrollarea;
|
|
int lastlabel, numlabel;
|
|
int id1, id2; // remind the two ids has been selected
|
|
int iboard[2], side[2]; // remind the board (1...npair) and the side(0=left, 1=right)
|
|
void FillEdit(int board, int id);
|
|
void ExchangePlayersCB();
|
|
public:
|
|
|
|
typedef Abbinamento CLASSNAME;
|
|
Abbinamento();
|
|
};
|
|
*/
|
|
Abbinamento::Abbinamento()
|
|
{
|
|
CtrlLayout(*this, "Modify Colors");
|
|
|
|
// Add(scrollarea);
|
|
// scrollarea.LeftPosZ(14, 499).TopPosZ(7, 307);
|
|
// scrollarea.SetRect(50,50,490,400);
|
|
// scrollarea.work.Color(SRed); //not necessary... just to play with total...
|
|
int i, npair, code, idw, idb, res, wf, bf;
|
|
lastlabel = 1;
|
|
numlabel = 0;
|
|
id1 = id2 = 0;
|
|
iboard[0] = iboard[1] = 0;
|
|
side[0] = side[1] = 0;
|
|
|
|
npair = TD.pairing[0][TD.currentRound];
|
|
//for (i=1; i<=npair; i++) pairingNew[i]=pairing[i][currentRound];//do a copy
|
|
scrollarea.SetWorkSize( Size(485, 26*npair) );
|
|
scrollarea.sc.HideX();
|
|
for (i=1; i<=npair; i++)
|
|
{ //code = pairingNew[i];
|
|
code = TD.pairing[i][TD.currentRound];
|
|
TD.DecodeResult(code, &idw, &idb, &res);
|
|
|
|
if (player[idw].canChangeDuecolor && player[idw].duecolor==WHITE) wf = WY;
|
|
else if (player[idw].canChangeDuecolor && player[idw].duecolor==BLACK) wf = BY;
|
|
else if (!player[idw].canChangeDuecolor && player[idw].duecolor==BLACK) wf = BN;
|
|
else if (!player[idw].canChangeDuecolor && player[idw].duecolor==WHITE) wf = WN;
|
|
else wf = NG;
|
|
|
|
if (player[idb].canChangeDuecolor && player[idb].duecolor==WHITE) bf = WY;
|
|
else if (player[idb].canChangeDuecolor && player[idb].duecolor==BLACK) bf = BY;
|
|
else if (!player[idb].canChangeDuecolor && player[idb].duecolor==BLACK) bf = BN;
|
|
else if (!player[idb].canChangeDuecolor && player[idb].duecolor==WHITE) bf = WN;
|
|
else bf = NG;
|
|
|
|
scrollarea.work.Add(a[i]);
|
|
a[i].Set(i, idw, idb, player[idw].RATING, player[idb].RATING,
|
|
player[idw].tiebreak[SCORE], player[idb].tiebreak[SCORE], wf, bf);
|
|
a[i].LeftPosZ(1, 478).TopPosZ(1 + (i-1)*26, 26);
|
|
|
|
a[i].btnwid.WhenAction = THISBACK2(FillEdit, a[i].board * 10 + 0, a[i].wid);
|
|
a[i].btnbid.WhenAction = THISBACK2(FillEdit, a[i].board * 10 + 1, a[i].bid);
|
|
}
|
|
|
|
edtw.SetLabel(""); //<<= "";
|
|
edtb.SetLabel(""); // <<= "";
|
|
btnExchange.WhenAction = THISBACK(ExchangePlayersCB);
|
|
btnVerify.WhenAction = THISBACK(VerifyPairCB);
|
|
btnDone.WhenAction = THISBACK(DoneCB);
|
|
btnClose.WhenAction = THISBACK(CloseCB);
|
|
// ImageButton btn;
|
|
// Add(btn);
|
|
// btn.LeftPosZ(24, 73).TopPosZ(231, 27);
|
|
// btn.SetImage(Vega5Img::blackN());
|
|
}
|
|
|
|
void Abbinamento::FillEdit(int board, int id)
|
|
{ // flaglabel = 0 left, 1 right
|
|
int flaglabel;
|
|
String str;
|
|
flaglabel = board % 10; // extract the side
|
|
board = board/10;
|
|
// code = pairingNew[board];
|
|
// DecodeResult(code, &idw, &idb, &res);
|
|
|
|
// str = NFormat("%3d (%3d)", id, board);
|
|
str = NFormat("%d", id);
|
|
numlabel++;
|
|
|
|
if (lastlabel) { // force to write not in the last label
|
|
edtw.SetLabel(str); // <<= str;
|
|
id1 = id;
|
|
if (numlabel > 2) a[ iboard[0] ].rect.Color(White);
|
|
lastlabel = 0;
|
|
iboard[lastlabel] = board;
|
|
side[lastlabel] = flaglabel;
|
|
a[board].rect.Color(Color(175,255,84)); // old return White
|
|
}
|
|
else { // try to write in right label
|
|
edtb.SetLabel(str); // <<= str;
|
|
id2 = id;
|
|
if (numlabel > 2) a[ iboard[1] ].rect.Color(White);
|
|
lastlabel = 1;
|
|
iboard[lastlabel] = board;
|
|
side[lastlabel] = flaglabel;
|
|
a[board].rect.Color(Color(175,255,84)); // old return White
|
|
}
|
|
if (numlabel>2) numlabel = 2; // count the written label
|
|
//String a=NFormat("(%3d-%d) (%3d-%d)", iboard[0], side[0], iboard[1], side[1]);
|
|
//lbl.SetLabel(a);
|
|
if (numlabel == 2) ShowInfo();
|
|
|
|
}
|
|
|
|
|
|
void Abbinamento::VerifyPairCB()
|
|
{
|
|
String str1, str2;
|
|
|
|
str1 = edtw.GetText(); // AsString(~edtw);
|
|
str2 = edtb.GetText(); // AsString(~edtb);
|
|
if ( IsNull(str1) || IsNull(str2) ) {
|
|
Exclamation(t_("Please select two players"));
|
|
return;
|
|
}
|
|
if ( CanPlayWith(id1, id2, TD.currentRound) ) Exclamation(t_("The selected players are compatible"));
|
|
else Exclamation(t_("The selected players are NON compatible"));
|
|
}
|
|
|
|
void Abbinamento::DoneCB()
|
|
{
|
|
String str;
|
|
int i, idw, idb, rtgw, rtgb, npair;
|
|
extern void SortPairs(int round);
|
|
npair = TD.pairing[0][TD.currentRound];
|
|
for (i=1; i<=npair; i++) {
|
|
a[i].Get(idw, idb, rtgw, rtgb);
|
|
TD.pairing[i][TD.currentRound] = TD.CodifyResult( idw, idb, 9);
|
|
}
|
|
if (TD.currentRound>1) TD.VerifyColor(TD.currentRound); // check only for round>1
|
|
SortPairs(TD.currentRound);
|
|
TD.SavePairsFile(TD.currentRound); // save on a file the pairing
|
|
Close();
|
|
}
|
|
|
|
|
|
bool Abbinamento::ShowInfo()
|
|
{ String str1, str2;
|
|
SwissUSCF USCF;
|
|
int b1, b2;
|
|
int idw1, idb1, idw2, idb2, rtgw, rtgb;
|
|
int d;
|
|
|
|
str1 = edtw.GetText(); // AsString(~edtw);
|
|
str2 = edtb.GetText(); // AsString(~edtb);
|
|
if ( IsNull(str1) || IsNull(str2) ) {
|
|
Exclamation(t_("Please select two players"));
|
|
return false;
|
|
}
|
|
b1 = iboard[0];
|
|
b2 = iboard[1];
|
|
|
|
a[b1].Get(idw1, idb1, rtgw, rtgb);
|
|
a[b2].Get(idw2, idb2, rtgw, rtgb);
|
|
|
|
if (b1==b2) {
|
|
lbl.SetLabel("0");
|
|
return false;
|
|
}
|
|
if (id1==idw1 && id2==idw2) { // transposition
|
|
d = USCF.CompareTranspose(idw1, idb1, idw2, idb2);
|
|
if (d == 100000) {
|
|
lbl.SetLabel(t_("FORBID!"));
|
|
return false;
|
|
}
|
|
lbl.SetLabel( NFormat("%d trans.", d) );
|
|
}
|
|
else if (id1==idw1 && id2==idb2) {
|
|
d = USCF.CompareInterchange(idw1, idb1, idw2, idb2, 1);
|
|
if ( d == 100000 ) {
|
|
lbl.SetLabel( t_("FORBID!"));
|
|
return false;
|
|
}
|
|
lbl.SetLabel( NFormat("%d inter.", d) );
|
|
}
|
|
else if (id1==idb1 && id2==idw2) {
|
|
d = USCF.CompareInterchange(idw1, idb1, idw2, idb2, 0);
|
|
if (d == 100000) {
|
|
lbl.SetLabel( "FORBID!");
|
|
return false;
|
|
}
|
|
lbl.SetLabel( NFormat("%d inter.", d) );
|
|
}
|
|
else if (id1==idb1 && id2==idb2) {
|
|
d = USCF.CompareTranspose(idw1, idb1, idw2, idb2);
|
|
if (d == 100000) {
|
|
lbl.SetLabel( t_("FORBID!"));
|
|
return false;
|
|
}
|
|
lbl.SetLabel( NFormat("%d trans.", d) );
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void Abbinamento::CloseCB()
|
|
{
|
|
if (!PromptYesNo(t_("The current data will be lost.&Do you want to continue?"))) return;
|
|
Close();
|
|
}
|
|
|
|
|
|
void Abbinamento::ExchangePlayersCB()
|
|
{ String str1, str2;
|
|
// int id1, b1, id2, b2, flagalign1, flagalign2;
|
|
// int code1, code2, idw1, idb1, idw2, idb2, res;
|
|
// int ans, d;
|
|
// int p1, p2, s1, s2, r80, r200;
|
|
|
|
str1 = edtw.GetText(); // AsString(~edtw);
|
|
str2 = edtb.GetText(); // AsString(~edtb);
|
|
if ( IsNull(str1) || IsNull(str2) ) {
|
|
Exclamation(t_("Choose two players to exchange"));
|
|
return;
|
|
}
|
|
if ( !ShowInfo() ) {
|
|
Exclamation(t_("This exchange is ILLEGAL"));
|
|
return;
|
|
}
|
|
/*
|
|
sscanf(str1, "%d (%d", &id1, &b1);
|
|
code1 = pairingNew[b1];
|
|
DecodeResult(code1, &idw1, &idb1, &res);
|
|
|
|
sscanf(str2, "%d (%d", &id2, &b2);
|
|
code2 = pairingNew[b2];
|
|
DecodeResult(code2, &idw2, &idb2, &res);
|
|
|
|
if (id1==id2) {
|
|
Exclamation("This exchange looks rather stupid.&Do you agree?");
|
|
return;
|
|
}
|
|
if (b1==b2) {
|
|
Exclamation("This exchange will be performed by Vega if necessary");
|
|
return;
|
|
}
|
|
// check 200 points rule
|
|
// WW & BB, oppure BB & WW, in ogni caso i duecolor
|
|
// sono diversi nelle due coppie
|
|
p1 = playerState[idw1].colorDiff * playerState[idb1].colorDiff;
|
|
p2 = playerState[idw2].colorDiff * playerState[idb2].colorDiff;
|
|
s1 = playerState[idw1].duecolor + playerState[idb1].duecolor;
|
|
s2 = playerState[idw2].duecolor + playerState[idb2].duecolor;
|
|
if ( (p1>0 || p2>0) && (s1*s2<0) ) r200 = 1;
|
|
else r200 = 0;
|
|
|
|
// check 80 points rule
|
|
// WW & BB, oppure BB & WW, con diff=0 e duecolor
|
|
// diversi nelle due coppie
|
|
p1 = playerState[idw1].colorDiff + playerState[idb1].colorDiff;
|
|
p2 = playerState[idw2].colorDiff + playerState[idb2].colorDiff;
|
|
s1 = playerState[idw1].duecolor + playerState[idb1].duecolor;
|
|
s2 = playerState[idw2].duecolor + playerState[idb2].duecolor;
|
|
if ( (p1==0 && p2==0) && (s1*s2<0) ) r80 = 1;
|
|
else r80 = 0;
|
|
|
|
if (id1==idw1 && id2==idw2) { // transposition
|
|
d = CompareTranspose(idw1, idb1, idw2, idb2);
|
|
if (d == 100000)
|
|
{ Exclamation("The exchange is illegal");
|
|
return;
|
|
}
|
|
if (d>200 && r200) {
|
|
sprintf(str, "D = %d", d);
|
|
ans = WarningDialog(str, "Contrast with 200 points rule. Do you want to proceede anyway?");
|
|
if (ans == 0) return;
|
|
}
|
|
else if (d>80 && r80) {
|
|
sprintf(str, "D = %d", d);
|
|
ans = WarningDialog(str, "Contrast with 80 points rule. Do you want to proceede anyway?");
|
|
if (ans == 0) return;
|
|
}
|
|
flagalign1 = 0;
|
|
flagalign2 = 0;
|
|
pairingNew[b1] = CodifyResult(id2, idb1, 9);
|
|
pairingNew[b2] = CodifyResult(id1, idb2, 9);
|
|
}
|
|
else if (id1==idw1 && id2==idb2) {
|
|
d = CompareInterchange(idw1, idb1, idw2, idb2, 1);
|
|
if (d==100000)
|
|
{ WarningMessage( sss[S_PLAYNOTC] , sss[S_CLOSE]);
|
|
return;
|
|
}
|
|
if (d>200 && r200) {
|
|
sprintf(str, "D = %d", d);
|
|
ans = WarningDialog(str, "This interchange do not met the 200 points rule\nDo you want to proceede anyway?");
|
|
if (ans == 0) return;
|
|
}
|
|
else if (d>80 && r80) {
|
|
sprintf(str, "D = %d", d);
|
|
ans = WarningDialog(str, "This interchange do not met the 80 points rule\nDo you want to proceede anyway?");
|
|
if (ans == 0) return;
|
|
}
|
|
flagalign1 = 1;
|
|
flagalign2 = 0;
|
|
pairingNew[b1] = CodifyResult(id2, idb1, 9);
|
|
pairingNew[b2] = CodifyResult(idw2, id1, 9);
|
|
}
|
|
else if (id1==idb1 && id2==idw2) {
|
|
d = CompareInterchange(idw1, idb1, idw2, idb2, 0);
|
|
if (d == 100000)
|
|
{ WarningMessage( sss[S_PLAYNOTC] , sss[S_CLOSE]);
|
|
return;
|
|
}
|
|
if (d>200 && r200) {
|
|
sprintf(str, "D = %d", d);
|
|
ans = WarningDialog(str, "This interchange do not met the 200 points rule\nDo you want to proceede anyway?");
|
|
if (ans == 0) return;
|
|
}
|
|
else if (d>80 && r80) {
|
|
sprintf(str, "D = %d", d);
|
|
ans = WarningDialog(str, "This interchange do not met the 80 points rule\nDo you want to proceede anyway?");
|
|
if (ans == 0) return;
|
|
}
|
|
flagalign1 = 0;
|
|
flagalign2 = 1;
|
|
pairingNew[b1] = CodifyResult(idw1, id2, 9);
|
|
pairingNew[b2] = CodifyResult(id1, idb2, 9);
|
|
}
|
|
else if (id1==idb1 && id2==idb2) {
|
|
d = CompareTranspose(idw1, idb1, idw2, idb2);
|
|
if (d==100000)
|
|
{ WarningMessage( sss[S_PLAYNOTC] , sss[S_CLOSE]);
|
|
return;
|
|
}
|
|
if (d>200 && r200) {
|
|
sprintf(str, "D = %d", d);
|
|
ans = WarningDialog(str, "This transposition do not met the 200 points rule\nDo you want to proceede anyway?");
|
|
if (ans == 0) return;
|
|
}
|
|
else if (d>80 && r80) {
|
|
sprintf(str, "D = %d", d);
|
|
ans = WarningDialog(str, "This transposition do not met the 80 points rule\nDo you want to proceede anyway?");
|
|
if (ans == 0) return;
|
|
}
|
|
flagalign1 = flagalign2 = 1;
|
|
pairingNew[b1] = CodifyResult(idw1, id2, 9);
|
|
pairingNew[b2] = CodifyResult(idw2, id1, 9);
|
|
}
|
|
*/
|
|
|
|
int tid, trtg, tflag, xid, xrtg, xflag;
|
|
float tscr, xscr;
|
|
int bb0, ss0, bb1, ss1;
|
|
bb0 = iboard[0]; ss0 = side[0];
|
|
bb1 = iboard[1]; ss1 = side[1];
|
|
a[ bb0 ].GetSide(ss0, tid, trtg, tscr, tflag); // get bb0-ss0 data
|
|
a[ bb1 ].GetSide(ss1, xid, xrtg, xscr, xflag); // get bb1-ss1 data
|
|
a[ bb0 ].SetSide(ss0, xid, xrtg, xscr, xflag); // set bb1-ss1 data in bb0-ss0
|
|
a[ bb1 ].SetSide(ss1, tid, trtg, tscr, tflag); // set bb0-ss0 data in bb1-ss1
|
|
|
|
// set white colors both selected board
|
|
edtw.SetLabel(""); // <<= "";
|
|
edtb.SetLabel(""); // <<= "";
|
|
a[ bb0 ].rect.Color(White);
|
|
a[ bb1 ].rect.Color(White);
|
|
|
|
numlabel = 0;
|
|
}
|