mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 22:02:58 -06:00
665 lines
24 KiB
C++
665 lines
24 KiB
C++
#include "VegaMain.h"
|
|
#include "Tournament.h"
|
|
|
|
//////////////////////////// class option image three state button ///////////////////
|
|
void OptionImage::ReFocus()
|
|
{
|
|
SetFocus();
|
|
}
|
|
|
|
OptionImage::OptionImage()
|
|
{
|
|
WhenAction = THISBACK(ReFocus);
|
|
}
|
|
|
|
|
|
void OptionImage::Paint(Draw& w) {
|
|
Size sz = GetSize();
|
|
if(!IsTransparent())
|
|
w.DrawRect(0, 0, sz.cx, sz.cy, SColorFace);
|
|
Size isz = Vega5Img::imgYes().GetSize(); //although maybe it would be good to calc from the biggest...?
|
|
Size tsz = GetSmartTextSize(w, label, font);
|
|
int ty = (sz.cy - tsz.cy) / 2; //text up-down
|
|
int iy = (tsz.cy - isz.cy) / 2 + ty;
|
|
bool ds = !IsShowEnabled();
|
|
|
|
Image m = (!notnull || threestate) && IsNull(option) ? ds ? Vega5Img::imgMaybe
|
|
: IsPush() ? Vega5Img::imgYes
|
|
: Vega5Img::imgMaybe :
|
|
option == 1 ? ds ? (switchimage ? Vega5Img::imgYes : Vega5Img::imgYes)
|
|
: IsPush() ? (switchimage ? Vega5Img::imgYes : Vega5Img::imgYes)
|
|
: (switchimage ? Vega5Img::imgYes : Vega5Img::imgYes)
|
|
: ds ? (switchimage ? Vega5Img::imgNo : Vega5Img::imgNo)
|
|
: IsPush() ? (switchimage ? Vega5Img::imgNo : Vega5Img::imgNo)
|
|
: (switchimage ? Vega5Img::imgNo : Vega5Img::imgNo);
|
|
w.DrawImage(0, iy, m);
|
|
|
|
DrawSmartText(w, isz.cx + 4, ty, tsz.cx, label, font, ds ? SGray : SBlack, VisibleAccessKeys() ? accesskey : 0);
|
|
//text length problem - tsz.cx - doesn't work? - adjust *.lay!!!
|
|
}
|
|
|
|
///////////////////////////////
|
|
void Avail3(One<Ctrl>& ctrl)
|
|
{
|
|
//ctrl.Create<OptionImage>().ThreeState().SetImage(Vega5Img::imgYes(), Vega5Img::imgNo(), Vega5Img::imgMaybe());
|
|
ctrl.Create<OptionImage>().SetImage(Vega5Img::imgYes(), Vega5Img::imgNo(), Vega5Img::imgMaybe());
|
|
}
|
|
|
|
int FilterCommaSpace(int c)
|
|
{
|
|
if (c == ';' || c =='\\') return false;
|
|
else return c;
|
|
}
|
|
|
|
int FilterComma(int c)
|
|
{
|
|
if (c == ';') return false;
|
|
else return c;
|
|
}
|
|
|
|
VegaTab1::VegaTab1()
|
|
{ // set the widths of each coloumn
|
|
// arr.ColumnWidths("25 3 5 12 8 8 2 3 3 3 3");
|
|
int i;
|
|
countID=1; //è un indice incrementale che cresce sempre
|
|
CtrlLayout(*this);
|
|
SizePos();
|
|
//id, label, width
|
|
arr.AddColumn("ID", t_("ID"), 3).HeaderTab().WhenAction = THISBACK1(SortRecord, 0); //0
|
|
arr.AddColumn("Name", t_("Team Name"), 17).HeaderTab().WhenAction = THISBACK1(SortRecord, 1); //1
|
|
arr.AddColumn("Origin", t_("Origin"), 17).HeaderTab().WhenAction = THISBACK1(SortRecord, 2); ; //2
|
|
arr.AddColumn("Federation", t_("Fed"), 17).HeaderTab().WhenAction = THISBACK1(SortRecord, 3); ; //3
|
|
arr.AddColumn("Rating", t_("Rating"), 6).HeaderTab().WhenAction = THISBACK1(SortRecord, 4); //4
|
|
arr.AddColumn("Status", t_("Status"), 6); //.Ctrls(Avail3); //5
|
|
|
|
//drop list widget
|
|
edtTitleP.Add("GM");
|
|
edtTitleP.Add("WGM");
|
|
edtTitleP.Add("IM");
|
|
edtTitleP.Add("WIM");
|
|
edtTitleP.Add("FM");
|
|
edtTitleP.Add("WFM");
|
|
edtTitleP.Add("M");
|
|
edtTitleP.Add("CM");
|
|
edtTitleP.Add("1N");
|
|
edtTitleP.Add("2N");
|
|
edtTitleP.Add("3N");
|
|
edtTitleP.Add("A");
|
|
edtTitleP.Add("B");
|
|
edtTitleP.Add("C");
|
|
edtTitleP.Add("D");
|
|
edtTitleP.Add("E");
|
|
edtTitleP.Add("F");
|
|
edtTitleP.Add("G");
|
|
edtTitleP.Add("H");
|
|
edtTitleP.Add("NC");
|
|
edtTitleP.Add("--");
|
|
edtTitleP <<= "GM";
|
|
|
|
// optGenderP.SetImage(Vega5Img::female(), Vega5Img::male()); // false state, true state
|
|
// optGenderP <<= 1;
|
|
// optStatusP.SetImage(Vega5Img::imgNo(), Vega5Img::imgYes()); // false state, true state
|
|
optGenderP <<= "m";
|
|
optStatusP <<= 1;
|
|
arrPlayer.TabAddsRow(false);
|
|
arrPlayer.AddColumn("Name", t_("Name"), 17).Edit(edtNameP.MaxChars(25));
|
|
arrPlayer.AddColumn("Country", t_("Fed"), 3).Edit(edtCountryP.MaxChars(20));
|
|
arrPlayer.AddColumn("Birthday", t_("Birthday"), 5).Edit(edtBirth.MaxChars(10));
|
|
arrPlayer.AddColumn("Gender", t_("G"), 2).Edit(optGenderP);
|
|
arrPlayer.AddColumn("Title", t_("Title"), 5).Edit(edtTitleP);
|
|
arrPlayer.AddColumn("IDFIDE", t_("ID FIDE"), 5).Edit(edtIDFideP.Min(0).MaxChars(8)) ;
|
|
arrPlayer.AddColumn("RatFIDE", t_("Rtg FIDE"), 5).Edit(edtRtgFideP.Min(0).MaxChars(4)) ;
|
|
arrPlayer.AddColumn("IDNat", t_("ID Nat"), 5).Edit(edtIDNatP.Min(0).MaxChars(8)) ;
|
|
arrPlayer.AddColumn("RatNat", t_("Rtg Nat"), 5).Edit(edtRtgNatP.Min(0).MaxChars(4)) ;
|
|
arrPlayer.AddColumn("K", t_("K"), 3).Edit(edtKP.Min(0).MaxChars(2)) ;
|
|
arrPlayer.AddColumn("Status", t_("Status"), 4).Edit(optStatusP);
|
|
// for (i=0; i<NBoards; i++) arrPlayer.Add("0","0","0", ~optGenderP, ~edtTitleP,"0","0","0","0","0",~optStatusP);
|
|
// rendere visibili solo NBoards righe
|
|
for (i=0; i<MAX_BOARDS; i++) arrPlayer.Add("0","0","0", ~optGenderP, ~edtTitleP,"0","0","0","0","0",~optStatusP);
|
|
|
|
arr.NoHorzGrid();
|
|
arr.SetLineCy(Vega5Img::imgYes().GetSize().cy+2); //option image adjustment..
|
|
//arr.WhenLeftClick = THISBACK(PromptCell);
|
|
arr.WhenLeftClick = THISBACK(FillFieldsFromRow);
|
|
arr.WhenLeftDouble = THISBACK(ModifyCrossTableCB);
|
|
// color even rows
|
|
arr.EvenRowColor();
|
|
|
|
btnClear <<= THISBACK(MaskDefaultValue);
|
|
// btnRemove <<= THISBACK(RemovePlayer);
|
|
|
|
btnAdd.SetImage(Vega5Img::add());
|
|
btnModify.SetImage(Vega5Img::modify());
|
|
btnClear.SetImage(CtrlImg::new_doc());
|
|
btnRemove.SetImage(Vega5Img::cancel());
|
|
btnPrint.SetImage(CtrlImg::print());
|
|
btnClose.SetImage(Vega5Img::start());
|
|
|
|
editName.SetFilter(FilterCommaSpace); //added filter
|
|
editRatFIDE <<= 0;
|
|
btnAvail.SetImage(Vega5Img::imgNo(), Vega5Img::imgYes());
|
|
btnAvail <<= true;
|
|
MaskDefaultValue();
|
|
}
|
|
|
|
|
|
void VegaTab1::SortRecord(int column)
|
|
{ if (column==4) arr.Sort(column, StdValueCompareDesc);
|
|
else arr.Sort(column);
|
|
}
|
|
|
|
void VegaTab1::RemovePlayer()
|
|
{ int index=arr.GetCursor();
|
|
if (index<0) return;
|
|
|
|
String ply;
|
|
int id = StrIntValue( AsString(arr.Get(index, 0)) ); // get ID
|
|
String strID = AsString(id);
|
|
ply = AsString(arr.Get(index, 1));
|
|
if (TD.IS_CLOSED_REGISTRATION) {
|
|
Exclamation("Now you can't remove the team.&Instead make it not available");
|
|
return;
|
|
}
|
|
if (PromptYesNo(t_("Do you want to remove the team&") + ply)) {
|
|
db.RemoveKey(strID);
|
|
arr.Remove(index);
|
|
MaskDefaultValue();
|
|
}
|
|
}
|
|
|
|
void VegaTab1::AddPlayer(int modifyFLAG)
|
|
{ // Add or Modify a player
|
|
// modifyFLAG = 0 : Add player
|
|
// modifyFLAG = 1 : Modify player
|
|
int i;
|
|
// check "Name" field
|
|
if ( TrimLeft( AsString(~editName) ).GetLength() == 0) {
|
|
Exclamation(t_("The Team name field cannot be empty!"));
|
|
// MaskDefaultValue();
|
|
// ActiveFocus(editName);
|
|
return;
|
|
}
|
|
if( TD.IS_CLOSED_REGISTRATION && !modifyFLAG) {
|
|
// if(!TD.IS_SWISS && TD.IS_CLOSED_REGISTRATION && !modifyFLAG) {
|
|
// Exclamation(t_("You can't add a player in a Round Robin&after the closure of registration"));
|
|
Exclamation(t_("You can't add a team&after the closure of registration"));
|
|
//MaskDefaultValue();
|
|
return;
|
|
}
|
|
// check number of players
|
|
if (TD.NPlayer>=TD.MAX_PLAYERS && !modifyFLAG) {
|
|
Exclamation( t_("Too much players! Stop with the registration"));
|
|
return;
|
|
}
|
|
// if( TD.IS_SWISS && TD.IS_CLOSED_REGISTRATION && !modifyFLAG) {
|
|
// if (!PromptYesNo(t_("Do you want to add a Late-Comer to the tournament?&You will not be able to delete him again")) )
|
|
// return;
|
|
// }
|
|
|
|
//set default in case of null or empty fields
|
|
if ( IsNull(AsString(~editOrigin)) ) editOrigin <<= "---";
|
|
if ( IsNull(AsString(~editCountry)) ) editCountry <<= "---";
|
|
if ( IsNull(AsString(~editRatFIDE)) ) editRatFIDE <<= 0;
|
|
|
|
if (modifyFLAG) { //Modify
|
|
int int_row;
|
|
int_row=arr.GetCursor();
|
|
if (int_row < 0) return; // prevent the crash of the application when int_row = -1)
|
|
arr.Set( int_row, 1, ~editName);
|
|
arr.Set( int_row, 2, ~editOrigin);
|
|
arr.Set( int_row, 3, ~editCountry);
|
|
arr.Set( int_row, 4, ~editRatFIDE);
|
|
arr.Set( int_row, 5, ~btnAvail);
|
|
TD.SaveVegFile(true); // make active the player for the next round
|
|
|
|
int id = StrIntValue( AsString( arr.Get(int_row, 0)) ); // get ID
|
|
String strID = AsString( id );
|
|
|
|
TeamArchive& team = db.Get(strID);
|
|
team.name = TrimRight(TrimLeft( AsString(~editName) ) );
|
|
team.origin = AsString(~editOrigin);
|
|
team.country = AsString(~editCountry);
|
|
team.ratingfide = 0; //for the moment
|
|
team.isAvailable = AsString(~btnAvail);
|
|
|
|
for (i=0; i<MAX_BOARDS; i++) { //NBoards
|
|
team.plr[i].name = AsString(arrPlayer.Get(i, 0));
|
|
team.plr[i].country = AsString(arrPlayer.Get(i, 1));
|
|
team.plr[i].data = AsString(arrPlayer.Get(i, 2));
|
|
team.plr[i].sex = AsString(arrPlayer.Get(i, 3));
|
|
team.plr[i].codetitle = AsString(arrPlayer.Get(i, 4));
|
|
team.plr[i].idfide = StrIntValue(AsString(arrPlayer.Get(i, 5)));
|
|
team.plr[i].ratingfide = StrIntValue(AsString(arrPlayer.Get(i, 6)));
|
|
team.plr[i].idnat = StrIntValue(AsString(arrPlayer.Get(i, 7)));
|
|
team.plr[i].ratingnat = StrIntValue(AsString(arrPlayer.Get(i, 8)));
|
|
team.plr[i].kcoeff = StrIntValue(AsString(arrPlayer.Get(i, 9)));
|
|
team.plr[i].isAvailable = AsString(arrPlayer.Get(i, 10));
|
|
}
|
|
TD.SaveVegFile(true); // make active the player for the next round
|
|
}
|
|
else {
|
|
// add a new registered player
|
|
TD.NPlayer++;
|
|
String strID = AsString(TD.NPlayer);
|
|
|
|
TeamArchive& team = db.Add( strID ); //aggiunge la squadra all'archivio
|
|
team.name = TrimRight(TrimLeft( AsString(~editName) ) );
|
|
team.origin = AsString(~editOrigin);
|
|
team.country = AsString(~editCountry);
|
|
team.ratingfide = 0; //for the moment
|
|
team.isAvailable = AsString(~btnAvail);
|
|
|
|
for (i=0; i<MAX_BOARDS; i++) { //NBoards
|
|
team.plr[i].name = AsString(arrPlayer.Get(i, 0));
|
|
team.plr[i].country = AsString(arrPlayer.Get(i, 1));
|
|
team.plr[i].data = AsString(arrPlayer.Get(i, 2));
|
|
team.plr[i].sex = AsString(arrPlayer.Get(i, 3));
|
|
team.plr[i].codetitle = AsString(arrPlayer.Get(i, 4));
|
|
team.plr[i].idfide = StrIntValue(AsString(arrPlayer.Get(i, 5)));
|
|
team.plr[i].ratingfide = StrIntValue(AsString(arrPlayer.Get(i, 6)));
|
|
team.plr[i].idnat = StrIntValue(AsString(arrPlayer.Get(i, 7)));
|
|
team.plr[i].ratingnat = StrIntValue(AsString(arrPlayer.Get(i, 8)));
|
|
team.plr[i].kcoeff = StrIntValue(AsString(arrPlayer.Get(i, 9)));
|
|
team.plr[i].isAvailable = AsString(arrPlayer.Get(i, 10));
|
|
}
|
|
countID++;
|
|
arr.Add( countID, team.name, team.origin, team.country, ~editRatFIDE, ~btnAvail);
|
|
// arr.Add( TD.NPlayer, team.name, team.origin, team.country, ~editRatFIDE);
|
|
arr.GoEnd();
|
|
TD.SaveVegFile(true); // make active the player for the next round
|
|
}
|
|
MaskDefaultValue();
|
|
editName.SetFocus();
|
|
}
|
|
|
|
void VegaTab1::MaskDefaultValue() // body of the callback
|
|
{ int i;
|
|
editName <<= Null;
|
|
editOrigin <<= "---";
|
|
editCountry <<= "---";
|
|
editRatFIDE <<= 0;
|
|
btnAvail <<= true;
|
|
|
|
for (i=0; i<MAX_BOARDS; i++) { //NBoards
|
|
arrPlayer.Set(i, 0, "");
|
|
arrPlayer.Set(i, 1, "");
|
|
arrPlayer.Set(i, 2, "");
|
|
arrPlayer.Set(i, 3, "m");
|
|
arrPlayer.Set(i, 4, "--");
|
|
arrPlayer.Set(i, 5, 0);
|
|
arrPlayer.Set(i, 6, 0);
|
|
arrPlayer.Set(i, 7, 0);
|
|
arrPlayer.Set(i, 8, 0);
|
|
arrPlayer.Set(i, 9, 0);
|
|
if (i<TD.NBoards) arrPlayer.Set(i, 10, 1);
|
|
else arrPlayer.Set(i, 10, 0);
|
|
}
|
|
|
|
// ActiveFocus(editName);
|
|
}
|
|
|
|
void VegaTab1::FillFieldsFromRow()
|
|
{
|
|
String s;
|
|
|
|
int i = arr.GetClickRow();
|
|
if (i<0) return;
|
|
//int id = StrIntValue( AsString(arr.Get(i, 0)) ); // get ID
|
|
// String strID = AsString( id );
|
|
String strID = db.GetKey(i); //db is zero based
|
|
TeamArchive& team = db.Get(strID);
|
|
|
|
editName <<= team.name ; //1
|
|
editOrigin <<= team.origin ; //2
|
|
editCountry <<= team.country; //3
|
|
editRatFIDE <<= team.ratingfide; //4
|
|
btnAvail <<= team.isAvailable=="1" ? true : false;
|
|
|
|
for (i=0; i<8; i++) { //NBoards
|
|
arrPlayer.Set(i, 0, team.plr[i].name);
|
|
arrPlayer.Set(i, 1, team.plr[i].country);
|
|
arrPlayer.Set(i, 2, team.plr[i].data);
|
|
arrPlayer.Set(i, 3, team.plr[i].sex);
|
|
arrPlayer.Set(i, 4, team.plr[i].codetitle);
|
|
arrPlayer.Set(i, 5, team.plr[i].idfide);
|
|
arrPlayer.Set(i, 6, team.plr[i].ratingfide);
|
|
arrPlayer.Set(i, 7, team.plr[i].idnat);
|
|
arrPlayer.Set(i, 8, team.plr[i].ratingnat);
|
|
arrPlayer.Set(i, 9, team.plr[i].kcoeff);
|
|
arrPlayer.Set(i, 10, team.plr[i].isAvailable);
|
|
}
|
|
}
|
|
|
|
|
|
void VegaTab1::PromptCell()
|
|
{
|
|
String s;
|
|
if (arr.GetCursor()) {
|
|
s=AsString(arr.ReadRow(arr.GetCursor())[arr.GetClickColumn()]);
|
|
PromptOK(s);
|
|
}
|
|
}
|
|
|
|
int VegaTab1::GetAvail()
|
|
{
|
|
int nbye=0, nout=0;
|
|
for(int i=0; i<arr.GetCount(); i++) {
|
|
if ( IsNull(AsString(arr.Get(i, "Status"))) ) nbye++; // byes
|
|
else if ( AsString(arr.Get(i, "Status"))=="0" ) nout++;
|
|
}
|
|
return nbye * 1000 + nout;
|
|
}
|
|
|
|
|
|
void VegaTab1::ModifyCrossTableCB()
|
|
{ int int_row=arr.GetCursor();
|
|
if (int_row < 0) return; // prevent the crash of the application when int_row = -1)
|
|
if (!TD.IS_CLOSED_REGISTRATION) {
|
|
Exclamation(t_("Option available after the closure&of the registration"));
|
|
return;
|
|
}
|
|
ModifyCrossTableDlg dlg(int_row + 1);
|
|
dlg.Run();
|
|
}
|
|
|
|
/************************* print table ***************************/
|
|
|
|
PrintTableDlg::PrintTableDlg(ArrayCtrl *array)
|
|
{ int i;
|
|
arr = array;
|
|
CtrlLayout(*this, "Print Registered Players");
|
|
for (i=0; i<=12; i++) {
|
|
Add(opt[i]);
|
|
opt[i].LeftPosZ(128, 16).TopPosZ(36 + i*20, 15);
|
|
}
|
|
printed = false;
|
|
opt[1] <<= opt[5] <<= opt[7] <<= opt[9] <<= true;
|
|
btnClose <<= THISBACK(Close);
|
|
btnPrint <<= THISBACK(PrintDlgCB);
|
|
btnHtml <<= THISBACK(PrintPartecipantsHTML);
|
|
btnHtml.Tip(t_("It will contain all the registered players"));
|
|
}
|
|
|
|
|
|
void PrintTableDlg::PrintDlgCB()
|
|
{ int i;
|
|
FileOut out(TD.PATHDIR + "plist.txt");
|
|
String s;
|
|
if (!(bool)~opt[12]) { // print All registered players
|
|
for (i=1; i<=TD.NPlayer; i++)
|
|
{ String s = "";
|
|
if (~opt[0]) s << NFormat( "%3d ", i);
|
|
if (~opt[1]) s << NFormat( "%-25.25s ", AsString(arr->Get(i-1, "Name")) );
|
|
if (~opt[2]) s << NFormat( "%3.3s ", AsString(arr->Get(i-1, "Country")));
|
|
if (~opt[3]) s << NFormat( "%8.8s ", AsString(arr->Get(i-1, "Birthday")));
|
|
if (~opt[4]) s << NFormat( "%s ", AsString(arr->Get(i-1, "Gender")));
|
|
if (~opt[5]) s << NFormat( "%3.3s ", AsString(arr->Get(i-1, "Title")));
|
|
if (~opt[6]) s << NFormat( "%8.8s ", AsString(arr->Get(i-1, "IDFIDE")));
|
|
if (~opt[7]) s << NFormat( "%8.8s ", AsString(arr->Get(i-1, "RatFIDE")));
|
|
if (~opt[8]) s << NFormat( "%8.8s ", AsString(arr->Get(i-1, "IDNat")));
|
|
if (~opt[9]) s << NFormat( "%8.8s ", AsString(arr->Get(i-1, "RatNat")));
|
|
if (~opt[10]) s << NFormat( "%2s ", AsString(arr->Get(i-1, "K")));
|
|
out.PutLine(s);
|
|
}
|
|
}
|
|
else {
|
|
out.PutLine("\n The following players got a BYE:\n");
|
|
for (i=1; i<=TD.NPlayer; i++)
|
|
{ String s = "";
|
|
if ( IsNull(player[i].isAvailable) ) {
|
|
if (~opt[0]) s << NFormat( "%3d ", i);
|
|
if (~opt[1]) s << NFormat( "%-25.25s ", player[i].name);
|
|
if (~opt[2]) s << NFormat( "%3.3s ", player[i].country);
|
|
if (~opt[3]) s << NFormat( "%8.8s ", player[i].data);
|
|
if (~opt[4]) s << NFormat( "%s ", player[i].sex);
|
|
if (~opt[5]) s << NFormat( "%3.3s ", player[i].codetitle);
|
|
if (~opt[6]) s << NFormat( "%8d ", player[i].idfide);
|
|
if (~opt[7]) s << NFormat( "%5d ", player[i].ratingfide);
|
|
if (~opt[8]) s << NFormat( "%8d ", player[i].idnat);
|
|
if (~opt[9]) s << NFormat( "%5d ", player[i].ratingnat);
|
|
if (~opt[10]) s << NFormat( "%2d ", player[i].kcoeff);
|
|
if (~opt[11]) s << NFormat( "%2s", player[i].isAvailable);
|
|
out.PutLine(s);
|
|
}
|
|
}
|
|
out.PutLine("\n The following player(s) withdrew:\n");
|
|
for (i=1; i<=TD.NPlayer; i++)
|
|
{ String s = "";
|
|
if (player[i].isAvailable== "0") {
|
|
if (~opt[0]) s << NFormat( "%3d ", i);
|
|
if (~opt[1]) s << NFormat( "%-25.25s ", player[i].name);
|
|
if (~opt[2]) s << NFormat( "%3.3s ", player[i].country);
|
|
if (~opt[3]) s << NFormat( "%8.8s ", player[i].data);
|
|
if (~opt[4]) s << NFormat( "%s ", player[i].sex);
|
|
if (~opt[5]) s << NFormat( "%3.3s ", player[i].codetitle);
|
|
if (~opt[6]) s << NFormat( "%8d ", player[i].idfide);
|
|
if (~opt[7]) s << NFormat( "%5d ", player[i].ratingfide);
|
|
if (~opt[8]) s << NFormat( "%8d ", player[i].idnat);
|
|
if (~opt[9]) s << NFormat( "%5d ", player[i].ratingnat);
|
|
if (~opt[10]) s << NFormat( "%2d ", player[i].kcoeff);
|
|
if (~opt[11]) s << NFormat( "%2s", player[i].isAvailable);
|
|
out.PutLine(s);
|
|
}
|
|
}
|
|
}
|
|
out.Close();
|
|
Close();
|
|
printed = true;
|
|
}
|
|
|
|
void PrintTableDlg::PrintPartecipantsHTML()
|
|
{ int i;
|
|
String name[12];
|
|
name[0] = "<th>ID</th>";
|
|
name[1] = "<th>Name</th>";
|
|
name[2] = "<th>Fed</th>";
|
|
name[3] = "<th>Birthday</th>";
|
|
name[4] = "<th>Gender</th>";
|
|
name[5] = "<th>Title</th>";
|
|
name[6] = "<th>ID_FIDE</th>";
|
|
name[7] = "<th>RtgF</th>";
|
|
name[8] = "<th>ID_Nat</th>";
|
|
name[9] = "<th>RtgN</th>";
|
|
name[10]= "<th>K</th>";
|
|
name[11]= "<th>Status</th>";
|
|
|
|
// produce HTML files
|
|
FileOut savehtml(TD.PATHDIRWWW + "players.html");
|
|
savehtml << TD.HTMLCommonHeader();
|
|
savehtml << TD.HTMLNavBar();
|
|
|
|
savehtml << "<h2>" << TD.NAMETORNEO << "</h2>\n";
|
|
savehtml << "<h2>" << TD.PLACETORNEO << " - " << TD.DATATORNEO_B <<", "<<TD.DATATORNEO_E << "</h2>\n";
|
|
savehtml << "<h3> List of participants </h3>\n";
|
|
savehtml << "<table bgcolor=#efefef cellpadding=4 cellspacing=0 border=0> \n";
|
|
savehtml << "<tbody>\n";
|
|
|
|
savehtml << "<tr>";
|
|
|
|
for (i=0; i<=10; i++) //exclude the Status field
|
|
if (~opt[i]) savehtml << name[i];
|
|
savehtml << "</tr>\n";
|
|
|
|
for (i=1; i<=TD.NPlayer; i++)
|
|
{ if ((i+1)&1) savehtml << "<tr bgcolor=#e2e2f8> ";
|
|
else savehtml << "<tr bgcolor=#ffffff> ";
|
|
|
|
if (~opt[0]) savehtml << NFormat( "<td>%d</td> ", i);
|
|
if (~opt[1]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "Name")) );
|
|
if (~opt[2]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "Country")));
|
|
if (~opt[3]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "Birthday")));
|
|
if (~opt[4]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "Gender")));
|
|
if (~opt[5]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "Title")));
|
|
if (~opt[6]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "IDFIDE")));
|
|
if (~opt[7]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "RatFIDE")));
|
|
if (~opt[8]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "IDNat")));
|
|
if (~opt[9]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "RatNat")));
|
|
if (~opt[10]) savehtml << NFormat( "<td>%s</td>", AsString(arr->Get(i-1, "K")));
|
|
savehtml << " </tr>\n";
|
|
}
|
|
savehtml << "</tbody>\n";
|
|
savehtml << "</table>\n";
|
|
savehtml << "<br> <p align=\"center\"><a href=\"http://www.vegachess.com\"> Generated by Vega </a></p> \n";
|
|
savehtml << "</DIV></body>\n</html>\n";
|
|
savehtml.Close();
|
|
}
|
|
|
|
|
|
/***************************** ModifyCrossTable Dialog ****************************/
|
|
|
|
ModifyCrossTableDlg::ModifyCrossTableDlg(int idplayer)
|
|
{
|
|
CtrlLayout(*this, "Modify the Cross Table");
|
|
|
|
id = idplayer;
|
|
lblPlayer.SetLabel( AsString(id) + " " + player[id].name);
|
|
|
|
edtRound <<= TD.currentRound;
|
|
edtRound.Tip(t_("Set the round to display all other data"));
|
|
|
|
//edtRes <<= "0";
|
|
edtOpp.Tip(t_("Game against player 0=BYE&is considered forfeited"));
|
|
|
|
edtRes.Add("0");
|
|
edtRes.Add("½");
|
|
edtRes.Add("1");
|
|
edtRes.Add("Null");
|
|
edtRes.Tip(t_("'Null' set the game as 'unplayed'"));
|
|
|
|
edtCol.Add("White");
|
|
edtCol.Add("Black");
|
|
edtCol.Add("NOCOL");
|
|
edtCol.Add("NO TB");
|
|
FillEditCB();
|
|
|
|
btnClose.WhenAction = THISBACK(Close);
|
|
btnOk.WhenAction = THISBACK(DoneCB);
|
|
edtRound.WhenAction = THISBACK(FillEditCB);
|
|
}
|
|
|
|
|
|
void ModifyCrossTableDlg::FillEditCB()
|
|
{ int round = StrIntValue(AsString(~edtRound));
|
|
|
|
if (round<1 || round>TD.currentRound) {
|
|
Exclamation(t_("Round out of range"));
|
|
return;
|
|
}
|
|
if (TD.IS_SWISS) {
|
|
int opp = TD.playerOpponent[id][round];
|
|
int col = TD.playerColor[id][round];
|
|
int res = TD.roundResult[id][round];
|
|
|
|
edtOpp <<= opp;
|
|
|
|
if (opp==0 || col==0) edtCol <<= "NOCOL";
|
|
else if (col == 1) edtCol <<= "White";
|
|
else if (col == -1) edtCol <<= "Black";
|
|
else if (res == 8) edtCol <<= "NO TB";
|
|
|
|
if (res == 0 || res == 4) edtRes <<= "0";
|
|
else if (res == 1 || res == 3) edtRes <<= "1";
|
|
else if (res == 2 || res == 6) edtRes <<= "½";
|
|
else if (opp==0 && col==0 && res==0) edtRes <<= "Null";
|
|
}
|
|
else {
|
|
int opp = TD.playerOpponentRR[id][round];
|
|
int col = TD.playerColorRR[id][round];
|
|
int res = TD.roundResultRR[id][round];
|
|
|
|
edtOpp <<= opp;
|
|
|
|
if (opp==0 || col==0) edtCol <<= "NOCOL";
|
|
else if (col == 1) edtCol <<= "White";
|
|
else if (col == -1) edtCol <<= "Black";
|
|
else if (res == 8) edtCol <<= "NO TB";
|
|
|
|
if (res == 0 || res == 4) edtRes <<= "0";
|
|
else if (res == 1 || res == 3) edtRes <<= "1";
|
|
else if (res == 2 || res == 6) edtRes <<= "½";
|
|
else if (opp==0 && col==0 && res==0) edtRes <<= "Null";
|
|
}
|
|
}
|
|
|
|
|
|
void ModifyCrossTableDlg::DoneCB()
|
|
{ String res, col;
|
|
int round, idOpp;
|
|
|
|
round = StrIntValue(AsString(~edtRound));
|
|
|
|
if (round<1 || round>TD.currentRound) {
|
|
Exclamation(t_("Round out of range"));
|
|
return;
|
|
}
|
|
|
|
idOpp = StrIntValue(AsString(~edtOpp));
|
|
if (idOpp<0 || idOpp>TD.NPlayer || idOpp==id) {
|
|
Exclamation(t_("Set a valid opponent for the selected player"));
|
|
return;
|
|
}
|
|
|
|
if (TD.IS_SWISS) { //swiss
|
|
if (idOpp == 0) TD.playerOpponent[id][round] = 0;
|
|
else TD.playerOpponent[id][round] = idOpp;
|
|
|
|
res = AsString(~edtRes);
|
|
if ( res=="Null" ) {TD.playerOpponent[id][round] = TD.roundResult[id][round]
|
|
= TD.playerColor[id][round] = 0;
|
|
TD.AdjournCrossTableSwiss(TD.currentRound);
|
|
//return;
|
|
Close();
|
|
}
|
|
if (idOpp==0) {
|
|
if ( res=="1" ) TD.roundResult[id][round] = 3;
|
|
else if ( res=="½" ) TD.roundResult[id][round] = 6;
|
|
else if ( res=="0" ) TD.roundResult[id][round] = 4;
|
|
}
|
|
else {
|
|
if ( res=="1" ) TD.roundResult[id][round] = 1;
|
|
else if ( res=="½" ) TD.roundResult[id][round] = 2;
|
|
else if ( res=="0" ) TD.roundResult[id][round] = 0;
|
|
}
|
|
|
|
col = AsString(~edtCol);
|
|
if ( col == "NOCOL" ) TD.playerColor[id][round] = 0; //NO_COLOR;
|
|
else if ( col == "Black" ) TD.playerColor[id][round] = -1; //BLACK_COLOR;
|
|
else if ( col == "White" ) TD.playerColor[id][round] = 1; //WHITE_COLOR;
|
|
else { TD.playerColor[id][round] = 0;
|
|
TD.roundResult[id][round] = 8; // generic code for forfeited game with no bucholz
|
|
}
|
|
TD.AdjournCrossTableSwiss(TD.currentRound);
|
|
}
|
|
else { // round robin
|
|
if (idOpp == 0) TD.playerOpponentRR[id][round] = 0;
|
|
else TD.playerOpponentRR[id][round] = idOpp;
|
|
|
|
res = AsString(~edtRes);
|
|
if ( res=="Null" ) { TD.playerOpponentRR[id][round] = TD.roundResultRR[id][round]
|
|
= TD.playerColorRR[id][round] = 0;
|
|
TD.AdjournCrossTableRR(TD.currentRound);
|
|
Close();
|
|
//return;
|
|
}
|
|
if (idOpp==0) {
|
|
if ( res=="1" ) TD.roundResultRR[id][round] = 3;
|
|
else if ( res=="½" ) TD.roundResultRR[id][round] = 6;
|
|
else if ( res=="0" ) TD.roundResultRR[id][round] = 4;
|
|
}
|
|
else {
|
|
if ( res=="1" ) TD.roundResultRR[id][round] = 1;
|
|
else if ( res=="½" ) TD.roundResultRR[id][round] = 2;
|
|
else if ( res=="0" ) TD.roundResultRR[id][round] = 0;
|
|
}
|
|
|
|
col = AsString(~edtCol);
|
|
if ( col == "NOCOL" ) TD.playerColorRR[id][round] = 0; //NO_COLOR;
|
|
else if ( col == "Black" ) TD.playerColorRR[id][round] = -1; //BLACK_COLOR;
|
|
else if ( col == "White" ) TD.playerColorRR[id][round] = 1; //WHITE_COLOR;
|
|
else { TD.playerColorRR[id][round] = 0;
|
|
TD.roundResultRR[id][round] = 8; // generic code for forfeited game with no bucholz
|
|
}
|
|
TD.AdjournCrossTableRR(TD.currentRound);
|
|
}
|
|
Close();
|
|
}
|