X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=2ea3d0a8deaba6e0d56a026778de02698bceedae;hb=34ac001a75453b75aed3a42c41ff7cefb67e27e4;hp=f695bb401d3c1190fe6450284993fe906a4aaacc;hpb=690bca7dd56930de9ce6398b99a9d61a3bcbbee1;p=xboard.git diff --git a/dialogs.c b/dialogs.c index f695bb4..2ea3d0a 100644 --- a/dialogs.c +++ b/dialogs.c @@ -286,11 +286,11 @@ static Option matchOptions[] = { { 0, 0, 0, NULL, (void*) &appData.cycleSync, "", NULL, CheckBox, N_("Sync after cycle") }, { 0, LR, 175, NULL, NULL, NULL, NULL, Label, N_("Tourney participants:") }, { 0, SAME_ROW|RR, 175, NULL, NULL, NULL, NULL, Label, N_("Select Engine:") }, -{ 150, T_VSCRL | T_FILL | T_WRAP, +{ 200, T_VSCRL | T_FILL | T_WRAP, 175, NULL, (void*) &engineName, NULL, NULL, TextBox, "" }, -{ 150, SAME_ROW|RR, +{ 200, SAME_ROW|RR, 175, NULL, (void*) engineMnemonic, (char*) &AddToTourney, NULL, ListBox, "" }, -{ 0, 0, 0, NULL, NULL, NULL, NULL, Break, "" }, // to decouple alignment above and below boxes +{ 0, SAME_ROW, 0, NULL, NULL, NULL, NULL, Break, "" }, // to decouple alignment above and below boxes //{ 0, COMBO_CALLBACK | NO_GETTEXT, // 0, NULL, (void*) &AddToTourney, (char*) (engineMnemonic+1), (engineMnemonic+1), ComboBox, N_("Select Engine:") }, { 0, 0, 10, NULL, (void*) &appData.tourneyType, "", NULL, Spin, N_("Tourney type (0 = round-robin, 1 = gauntlet):") }, @@ -494,6 +494,18 @@ static Option variantDescriptors[] = { { VariantChu, SAME_ROW, 135, NULL, (void*) &Pick, "#BFFFBF", NULL, Button, N_("chu shogi (12x12)")}, //{ -1, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment // optional buttons for engine-defined variants +{ 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" }, +{ 0, SAME_ROW, 0, NULL, NULL, NULL, NULL, Skip, ""}, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, { VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, { VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, { VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL }, @@ -550,11 +562,13 @@ NewVariantProc () { static int start; int i, last; - char buf[MSG_SIZ]; ranksTmp = filesTmp = sizeTmp = -1; // prefer defaults over actual settings if(appData.noChessProgram) sprintf(warning, _("Only bughouse is not available in viewer mode.")); else sprintf(warning, _("All variants not supported by the first engine\n(currently %s) are disabled."), first.tidy); - if(!start) while(variantDescriptors[start].type != Skip) start++; // locate first spare + if(!start) { + while(variantDescriptors[start].type != EndMark) start++; // locate spares + start += 2; // conditional EndMark and Break + } last = -1; for(i=0; variantDescriptors[start+i].type != EndMark; i++) { // create buttons for engine-defined variants char *v = EngineDefinedVariant(&first, i); @@ -569,19 +583,27 @@ NewVariantProc () variantDescriptors[start+last+1].type = Button; variantDescriptors[start+last+1].value = Skip; } - safeStrCpy(buf, engineVariant, MSG_SIZ); *engineVariant = NULLCHAR; // yeghh... + variantDescriptors[start-2].type = (last < 0 ? EndMark : Skip); + variantDescriptors[start-1].type = (last < 6 ? Skip : Break); + safeStrCpy(engineVariant+100, engineVariant, 100); *engineVariant = NULLCHAR; // yeghh... GenericPopUp(variantDescriptors, _("New Variant"), TransientDlg, BoardWindow, MODAL, 0); - safeStrCpy(engineVariant, buf, MSG_SIZ); // must temporarily clear to avoid enabling all variant buttons + safeStrCpy(engineVariant, engineVariant+100, MSG_SIZ); // must temporarily clear to avoid enabling all variant buttons } //------------------------------------------- Common Engine Options ------------------------------------- static int oldCores; +static char *egtPath; static int CommonOptionsOK (int n) { int newPonder = appData.ponderNextMove; + if(*egtPath != '/' && strchr(egtPath, ':')) { + ASSIGN(appData.egtFormats, egtPath); + } else { + ASSIGN(appData.defaultPathEGTB, egtPath); + } // make sure changes are sent to first engine by re-initializing it // if it was already started pre-emptively at end of previous game if(gameMode == BeginningOfGame) Reset(True, True); else { @@ -599,7 +621,7 @@ static Option commonEngineOptions[] = { { 0, 0, 1000, NULL, (void*) &appData.smpCores, "", NULL, Spin, N_("Maximum Number of CPUs per Engine:") }, { 0, 0, 0, NULL, (void*) &appData.polyglotDir, "", NULL, PathName, N_("Polygot Directory:") }, { 0, 0,16000, NULL, (void*) &appData.defaultHashSize, "", NULL, Spin, N_("Hash-Table Size (MB):") }, -{ 0, 0, 0, NULL, (void*) &appData.defaultPathEGTB, "", NULL, PathName, N_("Nalimov EGTB Path:") }, +{ 0, 0, 0, NULL, (void*) &egtPath, "", NULL, PathName, N_("EGTB Path:") }, { 0, 0, 1000, NULL, (void*) &appData.defaultCacheSizeEGTB, "", NULL, Spin, N_("EGTB Cache Size (MB):") }, { 0, 0, 0, NULL, (void*) &appData.usePolyglotBook, "", NULL, CheckBox, N_("Use GUI Book") }, { 0, 0, 0, NULL, (void*) &appData.polyglotBook, ".bin", NULL, FileName, N_("Opening-Book Filename:") }, @@ -615,6 +637,8 @@ UciMenuProc () { oldCores = appData.smpCores; oldPonder = appData.ponderNextMove; + if(appData.egtFormats && *appData.egtFormats) { ASSIGN(egtPath, appData.egtFormats); } + else { ASSIGN(egtPath, appData.defaultPathEGTB); } GenericPopUp(commonEngineOptions, _("Common Engine Settings"), TransientDlg, BoardWindow, MODAL, 0); } @@ -1096,7 +1120,7 @@ NewComCallback (int n) } Option commentOptions[] = { -{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 250, NULL, (void*) &commentText, (char*) &appData.commentFont, (char **) &CommentClick, TextBox, "" }, +{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 250, NULL, (void*) &commentText, NULL, (char **) &CommentClick, TextBox, "", &appData.commentFont }, { 0, 0, 50, NULL, (void*) &ClearComment, NULL, NULL, Button, N_("clear") }, { 0, SAME_ROW, 100, NULL, (void*) &SaveChanges, NULL, NULL, Button, N_("save changes") }, { 0, SAME_ROW, 0, NULL, (void*) &NewComCallback, "", NULL, EndMark , "" } @@ -1195,7 +1219,7 @@ NewMove () static Option tagsOptions[] = { { 0, 0, 0, NULL, NULL, NULL, NULL, Label, NULL }, -{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 200, NULL, (void*) &tagsText, (char*) &appData.tagsFont, (char **) &TagsClick, TextBox, "" }, +{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 200, NULL, (void*) &tagsText, NULL, (char **) &TagsClick, TextBox, "", &appData.tagsFont }, { 0, 0, 100, NULL, (void*) &NewMove, NULL, NULL, Button, N_("add next move") }, { 0,SAME_ROW,100,NULL, (void*) &changeTags, NULL, NULL, Button, N_("save changes") }, { 0,SAME_ROW, 0, NULL, (void*) &NewTagsCallback, "", NULL, EndMark , "" } @@ -2125,6 +2149,7 @@ GLT_OK (int n) { GLT_ParseList(); appData.gameListTags = strdup(lpUserGLT); + GameListUpdate(); return 1; } @@ -2389,7 +2414,8 @@ DisplayLogos (Option *w1, Option *w2) { void *whiteLogo = first.programLogo, *blackLogo = second.programLogo; if(appData.autoLogo) { - + if(appData.noChessProgram) whiteLogo = blackLogo = NULL; + if(appData.icsActive) whiteLogo = blackLogo = second.programLogo; switch(gameMode) { // pick logos based on game mode case IcsObserving: whiteLogo = second.programLogo; // ICS logo @@ -2460,13 +2486,13 @@ Option mainOptions[] = { // description of main window in terms of generic dialo { 13, R2R|T2T|SAME_ROW, 200, NULL, (void*) &CCB, NULL, NULL, Label, "Black" }, // black clock { 50, RR|TT|SAME_ROW, 100, NULL, (void*) &LogoB, NULL, NULL, Skip, "" }, // black logo { 0, LR|T2T|BORDER, 401, NULL, NULL, "", NULL, Skip, "2" }, // backup for title in window (if no room for other) -{ 0, LR|T2T|BORDER, 270, NULL, NULL, (char*)&appData.font, NULL, Label, "message" }, // message field +{ 0, LR|T2T|BORDER, 270, NULL, NULL, NULL, NULL, Label, "message", &appData.font }, // message field { 0, RR|TT|SAME_ROW, 125, NULL, NULL, "", NULL, BoxBegin, "" }, // (optional) button bar - { 0, 0, 0, NULL, (void*) &ToStartEvent, (char*)&appData.font, NULL, Button, N_("<<") }, - { 0, SAME_ROW, 0, NULL, (void*) &BackwardEvent, (char*)&appData.font, NULL, Button, N_("<") }, - { 0, SAME_ROW, 0, NULL, (void*) &PauseEvent, (char*)&appData.font, NULL, Button, N_(PAUSE_BUTTON) }, - { 0, SAME_ROW, 0, NULL, (void*) &ForwardEvent, (char*)&appData.font, NULL, Button, N_(">") }, - { 0, SAME_ROW, 0, NULL, (void*) &ToEndEvent, (char*)&appData.font, NULL, Button, N_(">>") }, + { 0, 0, 0, NULL, (void*) &ToStartEvent, NULL, NULL, Button, N_("<<"), &appData.font }, + { 0, SAME_ROW, 0, NULL, (void*) &BackwardEvent, NULL, NULL, Button, N_("<"), &appData.font }, + { 0, SAME_ROW, 0, NULL, (void*) &PauseEvent, NULL, NULL, Button, N_(PAUSE_BUTTON), &appData.font }, + { 0, SAME_ROW, 0, NULL, (void*) &ForwardEvent, NULL, NULL, Button, N_(">"), &appData.font }, + { 0, SAME_ROW, 0, NULL, (void*) &ToEndEvent, NULL, NULL, Button, N_(">>"), &appData.font }, { 0, 0, 0, NULL, NULL, "", NULL, BoxEnd, "" }, { 401, LR|TB, 401, NULL, (char*) &Exp, NULL, NULL, Graph, "shadow board" }, // board { 2, COMBO_CALLBACK, 0, NULL, (void*) &PMSelect, NULL, pieceMenuStrings[0], PopUp, "menuW" }, @@ -2564,13 +2590,14 @@ Option * BoardPopUp (int squareSize, int lineGap, void *clockFontThingy) { int i, size = BOARD_WIDTH*(squareSize + lineGap) + lineGap, logo = appData.logoSize; + int f = 2*appData.fixedSize; // width fudge, needed for unknown reasons to not clip board mainOptions[W_WHITE].choice = (char**) clockFontThingy; mainOptions[W_BLACK].choice = (char**) clockFontThingy; mainOptions[W_BOARD].value = BOARD_HEIGHT*(squareSize + lineGap) + lineGap; mainOptions[W_BOARD].max = mainOptions[W_SMALL].max = size; // board size mainOptions[W_SMALL].max = size - 2; // board title (subtract border!) mainOptions[W_BLACK].max = mainOptions[W_WHITE].max = size/2-3; // clock width - mainOptions[W_MESSG].max = appData.showButtonBar ? size-135 : size-2; // message + mainOptions[W_MESSG].max = appData.showButtonBar ? size-135+f : size-2+f; // message mainOptions[W_MENU].max = size-40; // menu bar mainOptions[W_TITLE].type = appData.titleInWindow ? Label : Skip ; if(logo && logo <= size/4) { // Activate logos