X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=b6abd82f8e4a07caba4b294419db7a94d90bf224;hb=c0d0ea91773838e5d11c3cd3b407fea251058c34;hp=f257a83456ad8fc10972a3e46657aa7d5219a6f2;hpb=12f5e5903b89d405f10521788b900d8added456f;p=xboard.git diff --git a/dialogs.c b/dialogs.c index f257a83..b6abd82 100644 --- a/dialogs.c +++ b/dialogs.c @@ -235,9 +235,9 @@ GenericReadout (Option *opts, int selected) //------------------------------------------- Match Options ------------------------------------------------------ char *engineName, *engineChoice, *tfName; -char *engineList[MAXENGINES] = {" "}, *engineMnemonic[MAXENGINES] = {""}; +char *engineList[MAXENGINES] = {" "}, *engineMnemonic[MAXENGINES]; -static void AddToTourney P((int n)); +static void AddToTourney P((int n, int sel)); static void CloneTourney P((void)); static void ReplaceParticipant P((void)); static void UpgradeParticipant P((void)); @@ -263,17 +263,17 @@ static Option matchOptions[] = { { 150, T_VSCRL | T_FILL | T_WRAP, 175, NULL, (void*) &engineName, "", NULL, TextBox, "" }, { 150, SAME_ROW|RR, - 175, NULL, (void*) (engineMnemonic+1), (char*) &AddToTourney, NULL, ListBox, "" }, + 175, NULL, (void*) engineMnemonic, (char*) &AddToTourney, NULL, ListBox, "" }, //{ 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):") }, { 0, 1, 1000000000, NULL, (void*) &appData.tourneyCycles, "", NULL, Spin, N_("Number of tourney cycles (or Swiss rounds):") }, { 0, 1, 1000000000, NULL, (void*) &appData.defaultMatchGames, "", NULL, Spin, N_("Default Number of Games in Match (or Pairing):") }, { 0, 0, 1000000000, NULL, (void*) &appData.matchPause, "", NULL, Spin, N_("Pause between Match Games (msec):") }, -{ 0, 0, 0, NULL, (void*) &appData.saveGameFile, ".pgn", NULL, FileName, N_("Save Tourney Games on:") }, -{ 0, 0, 0, NULL, (void*) &appData.loadGameFile, ".pgn", NULL, FileName, N_("Game File with Opening Lines:") }, +{ 0, 0, 0, NULL, (void*) &appData.saveGameFile, ".pgn .game", NULL, FileName, N_("Save Tourney Games on:") }, +{ 0, 0, 0, NULL, (void*) &appData.loadGameFile, ".pgn .game", NULL, FileName, N_("Game File with Opening Lines:") }, { 0, -2, 1000000000, NULL, (void*) &appData.loadGameIndex, "", NULL, Spin, N_("Game Number (-1 or -2 = Auto-Increment):") }, -{ 0, 0, 0, NULL, (void*) &appData.loadPositionFile, ".fen", NULL, FileName, N_("File with Start Positions:") }, +{ 0, 0, 0, NULL, (void*) &appData.loadPositionFile, ".fen .epd .pos", NULL, FileName, N_("File with Start Positions:") }, { 0, -2, 1000000000, NULL, (void*) &appData.loadPositionIndex, "", NULL, Spin, N_("Position Number (-1 or -2 = Auto-Increment):") }, { 0, 0, 1000000000, NULL, (void*) &appData.rewindIndex, "", NULL, Spin, N_("Rewind Index after this many Games (0 = never):") }, { 0, 0, 0, NULL, (void*) &appData.defNoBook, "", NULL, CheckBox, N_("Disable own engine books by default") }, @@ -313,18 +313,30 @@ CloneTourney () } static void -AddToTourney (int n) +AddToTourney (int n, int sel) { - AddLine(&matchOptions[7], engineMnemonic[SelectedListBoxItem(&matchOptions[8])+1]); + int nr; + char buf[MSG_SIZ]; + if(sel < 1) buf[0] = NULLCHAR; // back to top level + else if(engineList[sel][0] == '#') safeStrCpy(buf, engineList[sel], MSG_SIZ); // group header, open group + else { // normal line, select engine + AddLine(&matchOptions[7], engineMnemonic[sel]); + return; + } + nr = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents + ASSIGN(engineMnemonic[0], buf); + LoadListBox(&matchOptions[8], _("# no engines are installed")); + HighlightWithScroll(&matchOptions[8], 0, nr); } void MatchOptionsProc () { - NamesToList(firstChessProgramNames, engineList, engineMnemonic, "all"); + NamesToList(firstChessProgramNames, engineList, engineMnemonic, ""); matchOptions[9].min = -(appData.pairingEngine[0] != NULLCHAR); // with pairing engine, allow Swiss ASSIGN(tfName, appData.tourneyFile[0] ? appData.tourneyFile : MakeName(appData.defName)); ASSIGN(engineName, appData.participants); + ASSIGN(engineMnemonic[0], ""); GenericPopUp(matchOptions, _("Match Options"), TransientDlg, BoardWindow, MODAL, 0); } @@ -1218,9 +1230,19 @@ InstallOK (int n) static void EngSel (int n, int sel) { - if(sel < 1) return; - ASSIGN(engineLine, engineList[sel]); - InstallOK(0); + int nr; + char buf[MSG_SIZ]; + if(sel < 1) buf[0] = NULLCHAR; // back to top level + else if(engineList[sel][0] == '#') safeStrCpy(buf, engineList[sel], MSG_SIZ); // group header, open group + else { // normal line, select engine + ASSIGN(engineLine, engineList[sel]); + InstallOK(0); + return; + } + nr = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents + ASSIGN(engineMnemonic[0], buf); + LoadListBox(&installOptions[1], _("# no engines are installed")); + HighlightWithScroll(&installOptions[1], 0, nr); } static void @@ -1229,10 +1251,11 @@ LoadEngineProc (int engineNr, char *title) isUCI = storeVariant = v1 = useNick = False; addToList = hasBook = True; // defaults secondEng = engineNr; if(engineLine) free(engineLine); engineLine = strdup(""); - if(engineDir) free(engineDir); engineDir = strdup(""); + if(engineDir) free(engineDir); engineDir = strdup("."); if(nickName) free(nickName); nickName = strdup(""); if(params) free(params); params = strdup(""); - NamesToList(firstChessProgramNames, engineList, engineMnemonic, "all"); + ASSIGN(engineMnemonic[0], ""); + NamesToList(firstChessProgramNames, engineList, engineMnemonic, ""); GenericPopUp(installOptions, title, TransientDlg, BoardWindow, MODAL, 0); } @@ -1769,22 +1792,6 @@ DisplayTitle (char *text) SetWindowTitle(text, title, icon); } -void -DisplayWhiteClock (long timeRemaining, int highlight) -{ - if(appData.noGUI) return; - DisplayTimerLabel(11, _("White"), timeRemaining, highlight); - if(highlight) SetClockIcon(0); -} - -void -DisplayBlackClock (long timeRemaining, int highlight) -{ - if(appData.noGUI) return; - DisplayTimerLabel(12, _("Black"), timeRemaining, highlight); - if(highlight) SetClockIcon(1); -} - #define PAUSE_BUTTON "P" #define PIECE_MENU_SIZE 18 static String pieceMenuStrings[2][PIECE_MENU_SIZE+1] = { @@ -1912,11 +1919,6 @@ Exp (int n, int x, int y) case -3: menuNr = RightClick(Release, x, y, &pmFromX, &pmFromY), but3 = 0; break; case 10: DrawPosition(True, NULL); - if(twoBoards) { // [HGM] dual: draw other board in other orientation - flipView = !flipView; partnerUp = !partnerUp; - DrawPosition(True, NULL); - flipView = !flipView; partnerUp = !partnerUp; - } default: return NULL; } @@ -1952,6 +1954,64 @@ BoardPopUp (int squareSize, int lineGap, void *clockFontThingy) return mainOptions; } +static Option * +SlaveExp (int n, int x, int y) +{ + if(n == 10) { // expose event + flipView = !flipView; partnerUp = !partnerUp; + DrawPosition(True, NULL); // [HGM] dual: draw other board in other orientation + flipView = !flipView; partnerUp = !partnerUp; + } + return NULL; +} + +Option dualOptions[] = { // auxiliary board window +{ 0, L2L|T2T, 198, NULL, NULL, NULL, NULL, Label, "White" }, // white clock +{ 0, R2R|T2T|SAME_ROW, 198, NULL, NULL, NULL, NULL, Label, "Black" }, // black clock +{ 0, LR|T2T|BORDER, 401, NULL, NULL, NULL, NULL, Label, "message" }, // message field +{ 401, LR|TT, 401, NULL, (char*) &SlaveExp, NULL, NULL, Graph, "shadow board" }, // board +{ 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" } +}; + +void +SlavePopUp () +{ + // copy params from main board + dualOptions[0].choice = mainOptions[11].choice; + dualOptions[1].choice = mainOptions[12].choice; + dualOptions[3].value = mainOptions[22].value; + dualOptions[3].max = dualOptions[2].max = mainOptions[22].max; // board size + dualOptions[0].max = dualOptions[1].max = mainOptions[11].max; // clock width + GenericPopUp(dualOptions, "XBoard", DummyDlg, BoardWindow, NONMODAL, 1); +} + +void +DisplayWhiteClock (long timeRemaining, int highlight) +{ + if(appData.noGUI) return; + if(twoBoards && partnerUp) { + DisplayTimerLabel(&dualOptions[0], _("White"), timeRemaining, highlight); + return; + } + DisplayTimerLabel(&mainOptions[11], _("White"), timeRemaining, highlight); + if(highlight) SetClockIcon(0); +} + +void +DisplayBlackClock (long timeRemaining, int highlight) +{ + if(appData.noGUI) return; + if(twoBoards && partnerUp) { + DisplayTimerLabel(&dualOptions[1], _("Black"), timeRemaining, highlight); + return; + } + DisplayTimerLabel(&mainOptions[12], _("Black"), timeRemaining, highlight); + if(highlight) SetClockIcon(1); +} + + +//--------------------------------------------- + void DisplayMessage (char *message, char *extMessage) {